python网络爬虫实战解析
鄭重聲明: 本文僅用于學習等目的。
分析
首先要爬取股票數據,肯定要先知道有哪些股票吧,這里小編找到了一個網站,這個網站上有股票的編碼列表:https://hq.gucheng.com/gpdmylb.html 。
打開 Chrome 的開發者模式,將股票代碼一個一個選出來吧。具體過程小編就不貼了,各位同學自行實現。
我們可以將所有的股票代碼存放在一個列表中,剩下的就是找一個網站,循環的去將每一只股票的數據取出來咯。
這個網站小編已經找好了,是同花順,鏈接: http://stockpage.10jqka.com.cn/000001/ 。
想必各位聰明的同學已經發現了,這個鏈接中的 000001 就是股票代碼。
我們接下來只需要拼接這個鏈接,就能源源不斷的獲取到我們想要的數據。
實戰
首先,還是先介紹一下本次實戰用到的請求庫和解析庫為: Requests 和 pyquery 。數據存儲最后還是落地在 Mysql 。
獲取股票代碼列表
第一步當然是先構建股票代碼列表咯,我們先定義一個方法:
def get_stock_list(stockListURL):
r =requests.get(stockListURL, headers = headers)
doc = PyQuery(r.text)
list = []
# 獲取所有 section 中 a 節點,并進行迭代
for i in doc(’.stockTable a’).items():
try:
href = i.attr.href
list.append(re.findall(r"\d{6}", href)[0])
except:
continue
list = [item.lower() for item in list] # 將爬取信息轉換小寫
return list復制代碼
將上面的鏈接當做參數傳入,大家可以自己運行下看下結果,小編這里就不貼結果了,有點長。。。
獲取詳情數據
詳情的數據看起來好像是在頁面上的,但是,實際上并不在,實際最終獲取數據的地方并不是頁面,而是一個數據接口。
http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=000001復制代碼
至于是怎么找出來,小編這次就不說,還是希望各位想學爬蟲的同學能自己動動手,去尋找一下,多找幾次,自然就摸到門路了。
現在數據接口有了,我們先看下返回的數據吧:
showStockDate({“info”:{“000001”:{“name”:"\u5e73\u5b89\u94f6\u884c"}},“data”:{“000001”:{“10”:“16.13”,“8”:“16.14”,“9”:“15.87”,“13”:“78795234.00”,“19”:“1262802470.00”,“7”:“16.12”,“15”:“40225508.00”,“14”:“37528826.00”,“69”:“17.73”,“70”:“14.51”,“12”:“5”,“17”:“945400.00”,“264648”:“0.010”,“199112”:“0.062”,“1968584”:“0.406”,“2034120”:“9.939”,“1378761”:“16.026”,“526792”:“1.675”,“395720”:"-948073.000",“461256”:"-39.763",“3475914”:“313014790000.000”,“1771976”:“1.100”,“6”:“16.12”,“11”:""}}})復制代碼
很明顯,這個結果并不是標準的 json 數據,但這個是 JSONP 返回的標準格式的數據,這里我們先處理下頭尾,將它變成一個標準的 json 數據,再對照這頁面的數據進行解析,最后將分析好的值寫入數據庫中。
def getStockInfo(list, stockInfoURL):
count = 0
for stock in list:
try:
url = stockInfoURL + stock
r = requests.get(url, headers=headers)
# 將獲取到的數據封裝進字典
dict1 = json.loads(r.text[14: int(len(r.text)) - 1])
print(dict1)
這里我們加入異常處理,因為本次爬取的數據有些多,很有可能由于某些原因拋出異常,我們當然不希望有異常的時候中斷數據抓取,所以這里添加異常處理繼續抓取數據。
完整代碼
我們將代碼稍作封裝,完成本次的實戰。
import requests
import re
import json
from pyquery import PyQuery
import pymysql
數據庫連接
def connect():
conn = pymysql.connect(host=‘localhost’,
port=3306,
user=‘root’,
password=‘password’,
database=‘test’,
charset=‘utf8mb4’)
connection = connect()
conn, cursor = connection[‘conn’], connection[‘cursor’]
sql_insert = “insert into stock(code, name, jinkai, chengjiaoliang, zhenfu, zuigao, chengjiaoe, huanshou, zuidi, zuoshou, liutongshizhi, create_date) values (%(code)s, %(name)s, %(jinkai)s, %(chengjiaoliang)s, %(zhenfu)s, %(zuigao)s, %(chengjiaoe)s, %(huanshou)s, %(zuidi)s, %(zuoshou)s, %(liutongshizhi)s, now())”
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36’
}
def get_stock_list(stockListURL):
r =requests.get(stockListURL, headers = headers)
doc = PyQuery(r.text)
list = []
# 獲取所有 section 中 a 節點,并進行迭代
for i in doc(’.stockTable a’).items():
try:
href = i.attr.href
list.append(re.findall(r"\d{6}", href)[0])
except:
continue
list = [item.lower() for item in list] # 將爬取信息轉換小寫
return list
def getStockInfo(list, stockInfoURL):
count = 0
for stock in list:
try:
url = stockInfoURL + stock
r = requests.get(url, headers=headers)
# 將獲取到的數據封裝進字典
dict1 = json.loads(r.text[14: int(len(r.text)) - 1])
print(dict1)
def main():
stock_list_url = ‘https://hq.gucheng.com/gpdmylb.html’
stock_info_url = ‘http://qd.10jqka.com.cn/quote.php?cate=real&type=stock&callback=showStockDate&return=json&code=’
list = get_stock_list(stock_list_url)
# list = [‘601766’]
getStockInfo(list, stock_info_url)
if name == ‘main’:
main()復制代碼
電機學第七版烏曼課后答案
電化學方法原理和應用第二版邵元華課后答案
電力系統繼電保護黃少鋒課后答案
生物化學第4版同步輔導與習題集朱圣庚PDF
機床數控技術及應用第四版陳蔚芳課后答案
機器視覺算法與應用第2版課后答案
數據結構教程第5版李春葆課后答案
建筑材料第四版課后答案
應用統計學第四版盧冶飛課后答案
基因工程袁婺洲第二版課后答案
電機學第七版烏曼課后答案
電化學方法原理和應用第二版邵元華課后答案
電力系統繼電保護黃少鋒課后答案
生物化學第4版同步輔導與習題集朱圣庚PDF
機床數控技術及應用第四版陳蔚芳課后答案
機器視覺算法與應用第2版課后答案
數據結構教程第5版李春葆課后答案
建筑材料第四版課后答案
應用統計學第四版盧冶飛課后答案
基因工程袁婺洲第二版課后答案
化工原理上冊第五版陳敏恒課后答案
信號完整性與電源完整性分析第三版課后答案
C++程序設計教程第3版錢能課后答案
軟件工程導論第6版張海藩課后答案
自動控制原理習題解析胡壽松PDF
程序員教程第5版張淑平課后答案
電路第5版學習指導與習題分析PDF下載
電力系統分析第五版韓禎祥課后答案
現代電氣控制及PLC應用技術第6版王永華課后答案
物聯網應用與解決方案第2版張飛舟課后答案
物聯網體系結構協議標準與無線通信課后答案
普通化學原理第4版習題解析PDF下載
數據結構C++語言版第3版鄧俊輝課后答案
數學物理方法第三版吳崇試課后答案
工程造價基礎與預算賈蓮英課后答案
土力學第2版李廣信課后答案
供熱工程第五版賀平課后答案
Verilog數字系統設計教程第4版夏宇聞課后答案
C程序設計譚浩強第五版學習輔導PDF
C程序設計譚浩強第五版學習輔導PDF
芯片制造―半導體工藝制程實用教程第六版課后答案
網絡管理員教程第5版課后答案
現代永磁同步電機控制原理及MATLAB仿真袁雷課后答案
植物學第三版金銀根課后答案
數據庫系統概論第5版習題解析與實驗指導王珊張俊PDF下載
信號與系統第二版劉樹棠課后答案
深入淺出SpringSecurity王松課后答案
匯編語言第4版王爽課后答案
植物學第三版金銀根課后答案
材料科學基礎第三版胡賡祥戎詠華課后答案
數據庫系統概論第5版習題解析與實驗指導王珊張俊PDF下載
基礎有機化學第4版習題解析裴偉偉裴堅PDF下載
地貌學原理第4版楊景春課后答案
半導體物理與器件第四版課后答案
半導體制造技術課后答案
功能性食品學第三版鄭建仙課后答案
公共建筑設計原理第五版張文忠課后答案
信號與系統第二版劉樹棠課后答案
SPSS統計分析高級教程第3版張文彤課后答案
軟件設計師教程第5版褚華霍秋艷課后答案
計算機網絡第7版謝希仁課后答案
自動控制原理第六版胡壽松課后答案
自動控制原理第七版胡壽松課后答案
網絡工程師教程第5版雷震甲課后答案
機械制圖與識圖從入門到精通周明貴課后答案
數據結構題集C語言版嚴蔚敏PDF下載
數據結構C語言第2版嚴蔚敏課后答案
數據庫系統概論第5版王珊課后答案
數字圖像處理第四版拉斐爾課后答案
城市規劃原理第四版吳志強課后答案
土木工程學術論文寫作與報告趙志宏課后答案
功能性食品學第二版張小鶯課后答案
人工智能:一種現代的方法第3版羅素課后答案
交通大數據―理論與方法劉志遠張文波課后答案
SPSS統計分析基礎教程第3版張文彤課后習題答案
Python語言程序設計基礎第2版嵩天課后習題答案
C語言程序設計現代方法第2版課后習題答案
C程序設計第五版譚浩強課后習題答案
計算機組成原理第六版白中英戴志濤課后答案
電力電子技術第5版王兆安課后答案
模擬電子技術基礎第五版童詩白華成英課后答案
數據庫系統概論第5版習題解析與實驗指導PDF下載
城市規劃原理第四版吳志強課后答案
人工智能一種現代的方法第3版羅素課后答案
中國建筑史第七版潘谷西課后習題答案
C語言程序設計:現代方法第2版課后答案
C程序設計第五版譚浩強課后答案
總結
以上是生活随笔為你收集整理的python网络爬虫实战解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenDrive学习笔记
- 下一篇: 介绍一款开源的OpenDrive地图制作