<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          教你用 Python 快速獲取相關(guān)概念股,輔助價(jià)值投資!

          共 4161字,需瀏覽 9分鐘

           ·

          2022-01-10 19:05


          大家好,我是安果!
          股票交易中,價(jià)格、成交量、委比、換手率、市盈率等都是比較重要的數(shù)據(jù),它們能為我們購(gòu)買股票、基金等提供一定的參考性
          比如,我們看到一條關(guān)于「?豬?」的利好實(shí)時(shí)新聞,我們可以利用其中的一個(gè)參數(shù)或多個(gè)參數(shù),借助算法篩選出最優(yōu)的豬相關(guān)概念的股票、基金,提前進(jìn)行布局,賺取一波信息紅利

          下面以「?市盈率?為例,講解使用 Python 獲取相關(guān)概念股的完整流程

          #?1. 市盈率 PE

          股票市盈率,簡(jiǎn)稱 PE,是股票價(jià)格除以每股盈利的值,是價(jià)值投資中一個(gè)非常重要的財(cái)務(wù)指標(biāo)

          一般來說,市盈率越低,投資風(fēng)險(xiǎn)越小,投資價(jià)值越高

          市盈率也分為 3 種

          • 市盈利 - 靜

          • 市盈率 - 動(dòng)

          • 市盈率 - 滾動(dòng) TTM

          其中

          市盈率(靜)的值為總市值除以去年一年的總凈利潤(rùn)

          市盈率(動(dòng))的值為總市值除以預(yù)估今年全年的總凈利潤(rùn)

          市盈率(滾動(dòng))TTM 的值為總市值除以最近 4 個(gè)季度的總凈利潤(rùn)

          總體來說,市盈率 TTM 相比前兩者,數(shù)據(jù)值更具體參考性

          #?2. 爬取相關(guān)概念列表

          目標(biāo)對(duì)象:

          aHR0cDovL3N0b2NrLmpyai5jb20uY24vY29uY2VwdC9jb25jZXB0cGFnZS5zaHRtbD90bz1wYw==

          首先,利用 requests + lxml 獲取網(wǎng)頁(yè)元素進(jìn)行解析

          接著,利用正則過濾出關(guān)鍵數(shù)據(jù),包含:相關(guān)概念名稱、鏈接地址、相關(guān)概念 ID

          import?requests
          from?lxml?import?etree
          import?re

          ...
          ?def?__get_concept_stocks_info(self):
          ????????"""
          ????????獲取概念股信息
          ????????:return:
          ????????"""

          ????????html_element?=?etree.HTML(self.session.get(self.home_url).text)
          ????????a_elements?=?html_element.xpath('//p[@class="jrj-clear"]//a')

          ????????result?=?[]

          ????????for?a_element?in?a_elements:
          ????????????a_element_text?=?a_element.xpath('./text()')[0].replace('概念股',?'')
          ????????????a_element_href?=?a_element.xpath('./@href')[0]

          ????????????if?self.keyword?in?a_element_text:
          ????????????????a_element_tag?=?re.findall(r'^.*_(.*).shtml$',?a_element_href)[-1]
          ????????????????result.append({
          ????????????????????"cs":?a_element_text,
          ????????????????????"href":?a_element_href,
          ????????????????????"tag":?a_element_tag
          ????????????????})
          ????????return?result
          ...

          #?3. 爬取概念個(gè)股

          分析個(gè)股列表頁(yè)面后,發(fā)現(xiàn)列表數(shù)據(jù)來源于 JS 文件,URL 中的變量為上面的概念 ID

          遍歷相關(guān)概念列表,就可以獲取到所有個(gè)股數(shù)據(jù)

          PS:這里僅獲取股票名稱及編號(hào)

          ...
          ????def?__get_concept_stocks(self,?concept_stocks_info):
          ????????"""
          ????????獲取相關(guān)概念股列表
          ????????:param?concept_stocks_info:
          ????????:return:
          ????????"""

          ????????url?=?f'http://**/concept/conceptdetail/conceptStock_{concept_stocks_info.get("tag")}.js'
          ????????headers?=?{'User-Agent':?UserAgent().random}
          ????????#?去掉換行符,轉(zhuǎn)為中文
          ????????resp?=?self.session.get(url,?headers=headers).text.replace('\n',?'').encode('utf-8').decode(
          ????????????'unicode_escape')
          ????????#?正則匹配,獲取對(duì)應(yīng)股票
          ????????stocks_list?=?json.loads(re.findall(r'^.*"stockData":(.*)};$',?resp,?re.IGNORECASE)[0].replace("\'",?"\""))

          ????????return?[(item[1],?item[0])?for?item?in?stocks_list]
          ...
          ????????#?2、獲取相關(guān)概念列表
          ????????for?concept_stocks_info?in?concept_stocks_infos:
          ????????????concept_stocks?=?self.__get_concept_stocks(concept_stocks_info)
          ????????????# print('概念個(gè)股列表如下:')
          ????????????#?print(concept_stocks)
          ...

          # 4. 個(gè)股詳情及排序

          分析個(gè)股詳情頁(yè)面后,發(fā)現(xiàn) URL 由時(shí)間戳及股票 ID 組成

          我們只需要請(qǐng)求接口,利用正則進(jìn)行匹配獲取個(gè)股中需要的數(shù)據(jù)參數(shù)即可

          ...
          ????????def?__get_stock_info(self,?concept_stock):
          ????????"""
          ????????獲取個(gè)股的基本信息
          ????????:return:
          ????????"""

          ????????stock_name?=?concept_stock[0]??#?股票名稱
          ????????stock_tag?=?concept_stock[1]??#?股票編號(hào)
          ????????url?=?self.stock_home.format(stock_tag)

          ????????#?編碼問題
          ????????headers?=?{'User-Agent':?UserAgent().random}
          ????????resp?=?self.session.get(self.stock_url.format(stock_tag,?self.__get_time()),
          ????????????????????????????????headers=headers).text.replace('\n',?'')
          ????????#?解析關(guān)鍵數(shù)據(jù)
          ????????resp_data?=?json.loads(re.findall(r'^.*HqData:(.*)};$',?resp,?re.IGNORECASE)[0])[0]
          ????????#?print(resp_data)
          ????????#?獲取股票關(guān)鍵信息
          ????????stock_price?=?resp_data[11]??#?實(shí)時(shí)價(jià)格
          ????????#?print(stock_price)
          ????????#?獲取漲跌
          ????????stock_up_or_down?=?str(resp_data[19])?+?"%"??#?漲跌幅
          ????????# print("漲跌幅:", stock_up_or_down)
          ????????stock_num_ratio?=?resp_data[22]??#?量比
          ????????#?print(stock_num_ratio)
          ????????stock_change_ratio?=?str(resp_data[24])?+?"%"??#?換手率
          ????????#?print(stock_change_ratio)
          ????????stock_pe?=?resp_data[-1]??#?市盈率
          ????????#?print(stock_pe)

          ????????return?{
          ????????????"name":?stock_name,
          ????????????"no":?stock_tag,
          ????????????"url":?url,
          ????????????"price":?stock_price,
          ????????????"up_or_down":?stock_up_or_down,
          ????????????"num_ratio":?stock_num_ratio,
          ????????????"change_ratio":?stock_change_ratio,
          ????????????"pe":?stock_pe
          ????????}
          ...

          最后,我們按照市盈率進(jìn)行升序排列

          ...
          ??#?4、按照市盈利排序(升序)
          ??stocks.sort(key=lambda?x:?x["pe"])

          ??#?5、打印
          ??print(json.dumps(stocks))
          ...

          # 5. 總結(jié)一下

          在使用的時(shí)候,我們只需要傳入「?相關(guān)概念關(guān)鍵字參數(shù)?」,就可以按市盈率升序排列后,返回相關(guān)概念股列表

          當(dāng)然,你也可以利用個(gè)股中的其他數(shù)據(jù)參數(shù)進(jìn)行組合排序,獲取適合自己的投資策略

          我已將文中所有源碼上傳到下方公眾號(hào)后臺(tái),關(guān)注公眾號(hào)「?煎蛋搞錢?后回復(fù)關(guān)鍵字220110?」即可以獲取

          如果你覺得文章還不錯(cuò),請(qǐng)大家?點(diǎn)贊、分享、留言?下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!


          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  在线观看中国精品网站 | 日韩午夜欧美精品 | 无码人妻一区二区三区9视频 | 91无码国产成人精品 | 丁香五月婷婷久久 |