日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
教你用Python快速獲取行業(yè)板塊股,輔助價值投資!

1. 行業(yè)板塊

行業(yè)板塊與概念股在定義上還是有很大區(qū)別的。

創(chuàng)新互聯(lián)公司從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元洛扎做網(wǎng)站,已為上家服務(wù),為洛扎各地企業(yè)和個人服務(wù),聯(lián)系電話:028-86922220

一般來說,概念板塊的風(fēng)險更大,基于某個消息被短期炒作,很不穩(wěn)定,因此風(fēng)險更大

行業(yè)板塊是按股票行業(yè)進行分類,往往注重于長期,穩(wěn)定性更高。

在實際投資上,短期可以根據(jù)按「 市場熱點 」從概念股進行選股投資,中長期還是建議按「 行業(yè)板塊 」選股進行投資。

2. 爬取相關(guān)板塊及個股列表

目標(biāo)對象:

aHR0cDovL3N1bW1hcnkuanJqLmNvbS5jbi9oeWJrLw==

2-1  板塊列表

首先,我們使用 「 Toggle JavaScript 」插件發(fā)現(xiàn)頁面中的行業(yè)板塊數(shù)據(jù)來源于下面的請求結(jié)果

?http://**/?q=cn|bk|17&n=hqa&c=l&o=pl,d&p=1020&_dc=1650680429759?

其中,參數(shù)為 p 和 _dc 為可變參數(shù),p 代表頁碼數(shù)(從 1 開始),_dc 代表 13 位的時間戳,其他查詢參數(shù)都是固定內(nèi)容

然后,我們編寫代碼獲取響應(yīng)數(shù)據(jù),使用正則表達(dá)式匹配出行業(yè)列表的數(shù)據(jù)

...
self.ps_url = 'http://**/?q=cn|bk|17&n=hqa&c=l&o=pl,d&p={}050&_dc={}'
....
    def __get_timestramp(self):
        """
        獲取13位的時間戳
        :return:
        """
        return int(round(time.time() * 1000))
...
    def get_plates_list(self, plate_keyword):
        """
        獲取所有板塊
        :return:
        """
        plates = []

        index = 0
        while True:
            url = self.ps_url.format(index + 1, self.__get_timestramp())
            # 解析數(shù)據(jù)
            resp = self.session.get(url, headers=self.headers).text
            match = re.compile(r'HqData:(.*?)};', re.S)
            result = json.loads(re.findall(match, resp)[0].strip().replace("\n", ""))
            if not result:
                break

            # 根據(jù)關(guān)鍵字,過濾有效板塊
            temp_plate_list = [item for item in result if plate_keyword in item[2]]
            index += 1

            for item in temp_plate_list:
                print(item)

                plates.append({
                    "name": item[2],
                    "plate_path": item[1],
                    "up_or_down": str(item[10]) + "%",
                    "top_stock": item[-6]
                })
        return plates
...

最后,根據(jù)關(guān)鍵字對板塊進行一次篩選,通過板塊名、板塊路徑 PATH、板塊漲跌幅、最大貢獻股票名稱重新組裝成一個列表

注意:通過分析頁面發(fā)現(xiàn),根據(jù)板塊路徑 PATH 可以組裝成行業(yè)板塊個股列表頁面 URL

比如,行業(yè)板塊 PATH 為 400128925,那么行業(yè)板塊對應(yīng)個股列表的頁面 URL 為

?http://summary.**/hybk/400128925.shtml?

2-2  行業(yè)個股列表

爬取行業(yè)個股列表和上一步數(shù)據(jù)展示邏輯一樣,個股列表數(shù)據(jù)同樣來源于下面請求的結(jié)果

?http://**/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}?

其中,bk 后面對應(yīng)行業(yè)板塊 PATH,p 代表頁碼數(shù),_dc 代表 13 位的時間戳

...
# 個股
self.stock_url = 'http://**/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}'
....
    def get_stock_list(self, plate_path):
        """
        獲取某一個板塊下所有的個股信息
        包含:股票名稱、最新價格、漲跌幅、市盈率
        :param plate_info:
        :return:
        """
        index = 0
        stocks = []
        while True:
            url = self.stock_url.format(plate_path, index + 1, self.__get_timestramp())
            resp = self.session.get(url, headers=self.headers).text
            match = re.compile(r'HqData:(.*?)};', re.S)
            result = json.loads(re.findall(match, resp)[0].strip().replace("\n", ""))
            if not result:
                break
            index += 1

            for item in result:
                if item[-1] < 0:
                    continue
                stocks.append({
                    "stock_name": item[2],
                    "pe": item[-1],
                    "price": item[8],
                    "up_or_down": str(item[12]) + "%"
                })

        # 按pe降序排列
        stocks.sort(key=lambda x: x["pe"])

        return stocks

通過正則表達(dá)式對響應(yīng)結(jié)果進行匹配后,獲取個股的名稱、PE 市盈率、價格、漲跌幅 4 個關(guān)鍵數(shù)據(jù)

最后,對個股列表按 PE 進行升序排列后直接返回

3. 服務(wù)化

當(dāng)然,我們可以將這部分邏輯服務(wù)化供前端使用,以此提升用戶的體驗性

比如,使用 FastAPI 可以快速創(chuàng)建兩個服務(wù):根據(jù)關(guān)鍵字獲取行業(yè)板塊列表、根據(jù)板塊路徑獲取個股列表

from pydantic import BaseModel

# 板塊
class Plate(BaseModel):
    content: str  # 關(guān)鍵字


# 板塊下的個股
class PlateStock(BaseModel):
    plate_path: str  # 板塊路徑

#===========================================================
...

# 獲取板塊列表
@app.post("/xag/plate_list")
async def get_plate_list(plate: Plate):
    pstock = PStock()
    try:
        result = pstock.get_plates_list(plate.content)
        return success(data=result, message="查詢成功!")
    except Exception as e:
        return fail()
    finally:
        pstock.teardown()


# 獲取某一個板塊下的所有股票列表
@app.post("/xag/plate_stock_list")
async def get_plate_list(plateStock: PlateStock):
    pstock = PStock()
    try:
        result = pstock.get_stock_list(plateStock.plate_path)
        return success(data=result, message="查詢成功!")
    except Exception as e:
        return fail()
    finally:
        pstock.teardown()
...

前端以 Uniapp 為例,使用 uni-table 組件展示行業(yè)板塊列表及個股列表

部分代碼如下:

//個股列表 platestock.vue
...

                
                    
                        
                    
                
                提交

                
                0">
                    
                        
                            板塊
                            漲跌幅
                            強勢股
                        
                        
                            {{ item.name }}
                            {{ item.up_or_down }}
                            {{ item.top_stock }}
                        
                    
                
            
...
methods: {
            //表單提交數(shù)據(jù)
            submit(ref) {
                this.$refs[ref].validate().then(res => {
                    this.$http('xag/plate_list', this.baseFormData, {
                        hideLoading: false,
                        hideMsg: false,
                        method: 'POST'
                    }).then(res => {
                        console.log("內(nèi)容:", res.data)
                        if (res.data && res.data.length > 0) {
                            this.$tip.success("查詢成功!")
                            this.result = res.data
                        } else {
                            this.$tip.success("查詢結(jié)果為空,請換一個關(guān)鍵字查詢!")
                        }
                    }).catch(err => {
                        console.log("產(chǎn)生異常,異常信息:", err)
                    })

                }).catch(err => {
                    console.log('err', err);
                })
            }
...

最后部署完項目后,在前端頁面就能根據(jù)板塊名選擇合適的個股進行投資了

4. 總結(jié)一下

由于行業(yè)板塊更適用于中長期投資,我們只需要根據(jù)某一個關(guān)鍵字篩選出一個板塊,然后在板塊下的個股列表中可以非常直觀地看出市盈率較低的個股進行投資即可。


本文名稱:教你用Python快速獲取行業(yè)板塊股,輔助價值投資!
網(wǎng)址分享:http://www.5511xx.com/article/cohdpei.html