scrapy框架爬取大单、中单、小单净流入流出
文章目錄
- 一、 scrapy框架簡介
- 二、 爬取大單數據
- 1. 選取目標網站
- 2. 確定信息是否可以爬取
- 3. 加載動態信息
- 4. 解析網頁,爬取數據
- 三、代碼
一、 scrapy框架簡介
scrapy框架是一種便捷的爬蟲框架,能夠快速方便地爬取網頁信息,使用者可以不用了解正則表達式就能使用。scrapy的詳細內容可以參考以下帖子:
Scrapy框架流程詳解,
都是干貨,真正的了解scrapy框架
這里不再贅述。
二、 爬取大單數據
1. 選取目標網站
一般只有券商的行情軟件或行情網站上才有大單資金數據,所以選取最常用的同花順網站。
以中國神華(601088)為例,進入該只股票的頁面,網址為:中國神華
進入頁面后可以看到有一個實時成交分布的板塊,在該板塊里,有總流入、總流出、凈額等信息。
2. 確定信息是否可以爬取
點擊鼠標右鍵,選中【檢查】,查看數據對應的元素。
再點擊鼠標右鍵,查看網頁源代碼,是否包括想要爬取的內容。
用紅色框標注的部分就是我們想要的大單數據,可以發現,該部分并沒有具體的數值,說明網頁不是以靜態方式保存的網頁信息。
3. 加載動態信息
檢查下網頁是否存在動態信息。
點擊右鍵,選中【檢查】,切換至network。點擊上面的小圓鈕,將當前所有項目刪除。
稍等幾秒鐘就會發現,出現了很多新的項目。
選中其中的‘1/’(.xhr文件就是我們要找的文件,可以逐個嘗試),可以看到preview中的內容就是我們要找的“大單流出”和‘大單流入’。
Tips:xhr文件是XMLHttpRequest的縮寫,在后臺與服務器交換數據,這意味著可以在不加載整個網頁的情況下,對網頁某部分的內容進行更新。xhr文件會發送新的請求頭,請求新的數據,實現對網頁內容的更新。
切換至【header】選項,可以看到請求的url。
將這個url復制,打開一個新的網頁。
可以看到網頁內容中包含了我們想要的各種大單數據,現在可以開始爬取數據了。
4. 解析網頁,爬取數據
第一步:創建一個新的爬蟲項目,再創建新的爬蟲文件,命名為xhrget。
第二步:編寫xhr.py文件,start_urls就設置為剛才復制過來的url。
第三步:由于剛才復制過來的url對應的是二進制編碼(或者是其他的什么),需要轉化為‘utf-8’編碼格式。由于網頁是json格式,因此需要用json.loads函數進行再編碼,編碼后的頁面如圖所示。
第四步:有效數據提取。解析后的頁面是字典格式,直接按照字典的方式提取即可。
三、代碼
import scrapy import json import csv import pandas as pdclass XhrgetSpider(scrapy.Spider):name = 'xhrget'allowed_domains = ['stockpage.10jqka.com.cn']start_urls = ['http://stockpage.10jqka.com.cn/spService/601088/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/600048/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/600028/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/600036/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/601166/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/601288/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/601398/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/601818/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/600104/Funds/realFunds/free/1/','http://stockpage.10jqka.com.cn/spService/601668/Funds/realFunds/free/1/']def parse(self, response):# 重編碼jsonResponse = json.loads(response.body.decode('utf-8'))flash = jsonResponse['flash']# 證券代碼symbol = str(response.url).split('/')[-6]# 大單流出out_L = flash[0]['sr']# 中單流出out_M = flash[1]['sr']# 小單流出out_S = flash[2]['sr']# 小單流入in_S = flash[3]['sr']# 中單流入in_M = flash[4]['sr']# 大單流入in_L = flash[5]['sr']# 行業凈額industry_net = jsonResponse['field']['hyje']# 總流入in_all = jsonResponse['title']['zlr']# 總流出out_all = jsonResponse['title']['zlc']# 凈額net_amount = jsonResponse['title']['je']# 輸出(對于每個url會執行一次parse,所以要追加寫入)f = open('bigDeal.csv', 'a+', encoding='utf-8', newline='')csv_writer = csv.writer(f)try:data = pd.read_csv('bigDeal.csv', header = 0)csv_writer.writerow([symbol, out_L, out_M, out_S, in_S, in_M, in_L, industry_net, in_all, out_all, net_amount])except:csv_writer.writerow(['代碼', '大單流出', '中單流出', '小單流出', '小單流入', '中單流入', '大單流入', '行業凈額', '總流入', '總流出', '凈額'])csv_writer.writerow([symbol, out_L, out_M, out_S, in_S, in_M, in_L, industry_net, in_all, out_all, net_amount])總結
以上是生活随笔為你收集整理的scrapy框架爬取大单、中单、小单净流入流出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人理论简介—— 台湾交通大学机器人学
- 下一篇: 英特尔Atom处理器出货一亿,庆祝上网本