請求獲取資料
import requests url = 'https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' } response = requests.get(url=url, headers=headers) html = response.text print(html)
執行結果:
<html><body> <script type="text/javascript" src="//s.thsi.cn/js/chameleon/chameleon.min.1719332.js"></script> <script src="//s.thsi.cn/js/chameleon/chameleon.min.1719332.js" type="text/javascript"></script> <script language="javascript" type="text/javascript"> window.location.href="//q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/"; </script> </body></html>
結果中併為出現存在所要爬取的資料
思考:可能存在反爬
1、考慮請求頭資訊
2、存在加密可能
解決方法:1、請求頭中新增Cookie、Referer等後再次執行,問題解決
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', 'Cookie': 'v=Awcc3GskLeIF9alu7ByNVWQylrDUDNolNeJfetn1IU-9lCmu4dxrPkWw77Xq', 'Referer': 'https://q.10jqka.com.cn/' }
解析資料:
import parsel response = requests.get(url=url, headers=headers) html = response.text selector = parsel.Selector(response.text) # 提取所有tr標籤 data = selector.css('.m-table tr')[1:] # print(data) for i in data: info = i.css('td::text').getall() numberAndName = i.css('td a::text').getall() # print(numberAndName) # print(info) # 把資料儲存到字典裡 dit = { '序號': info[0], '程式碼': numberAndName[0], '名稱': numberAndName[1], '現價': info[1], '漲跌幅(%)': info[2], '漲跌': info[3], '漲速(%)': info[4], '換手(%)': info[5], '量比': info[6], '振幅(%)' : info[7], '成交額': info[8], '流通股': info[9], '流通市值': info[10], '市盈率': info[11] } print(dit)
儲存資料
股票資料儲存為csv
import csv # 建立檔案物件 f = open('stockInformation.txt', mode='w', encoding='utf-8', newline='') # 字典寫入方法 csv_write = csv.DictWriter(f, fieldnames=[ '序號', '程式碼', '名稱', '現價', '漲跌幅(%)', '漲跌', '漲速(%)', '換手(%)', '量比', '振幅(%)', '成交額', '流通股', '流通市值', '市盈率', ]) # 寫入表頭 csv_write.writeheader() ...... for i in data: ...... # 寫入資料 csv_write.writerow(dit) ......
執行結果:
翻頁爬取
分析請求連線的變化規律
https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/1/ajax/1/https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/3/ajax/1/
新增翻頁功能:
for page in range(1, 3): print(f'正在採集第{page}頁') url = f'https://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/{page}/ajax/1/' ...... print(dit)
執行結果:
目標網址cookies會變化,可以使用使用 requests.Session()
來自動管理 cookies
with requests.Session() as session: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', # 不需要設定 'Cookie' 頭部,因為 Session 會自動處理 'Referer': 'https://q.10jqka.com.cn/' }