python爬取知乎live_python爬虫——xml数据爬取
回想去年寫畢業(yè)論文時候需要數(shù)據(jù),雖然數(shù)據(jù)量不大,但是手工錄入,也是頗費(fèi)眼神。現(xiàn)在自學(xué)了Python,就拿曾經(jīng)的需求當(dāng)做案例吧!
爬取目標(biāo):最近20年每個月的仔豬價格,生豬價格和豬肉價格
爬取軟件:python 3.7.2 IDE:PyCharm
爬取包:requests, pandas ,lxml, time
打開如下部分:
打開檢查,如下圖
很好,數(shù)據(jù)就在最后的大紅框里面,分別對應(yīng)著時間和價格。有前端基礎(chǔ)一眼就能看出這是一個xml文檔.html為樹結(jié)構(gòu),xml也是樹結(jié)構(gòu),因此我們可以像解析html一樣解析xml。到這里我們就可以爬取仔豬價格數(shù)據(jù)了。
還有生豬價格和豬肉價格沒爬取呢,別急,看一下網(wǎng)址構(gòu)造:
發(fā)現(xiàn)這個鏈接變化之處有兩個地方,因此可以構(gòu)建一個dict以構(gòu)造多個URL。循環(huán)每個URL,請求,解析,存儲為bj_prok.xlsx
pigdata ={'smallpig':1565318072807,'livepig':1565327925160,'pork':1565328013572}
最終爬取效果(展示部分):
全部代碼如下:
import requests
from lxml import etree
import pandas as pd
import time
#構(gòu)造字典
pigdata ={'smallpig':1565318072807,'livepig':1565327925160,'pork':1565328013572}
#構(gòu)造函數(shù)get_info,解析網(wǎng)頁
def get_info(link):
#請求url
res = requests.get(url)
#轉(zhuǎn)換類型
html = etree.HTML(res.text)
#解析屬性值,用@屬性
date = html.xpath('//*[@name="2000"]/point/@name')
prices = html.xpath('//*[@name="2000"]/point/@y')
#返回日期和價格
return date,prices
i=1
#遍歷字典pigdata,同時遍歷鍵和值
for pigtype,pignum in pigdata.items():
#構(gòu)造url
url = 'http://www.caaa.cn/market/trend/local/xml/2-1-{type}.xml?&XMLCallDate={num}'.format(type=pigtype,num=pignum)
# print(url)
#調(diào)用函數(shù)get_info
pigs = get_info(url)
if i ==1:
small_pig = pd.DataFrame({'時間': pigs[0], '仔豬價格(元/千克)': pigs[1]}, index=range(1, len(pigs[0]) + 1))
elif i==2:
live_pig = pd.DataFrame({'活豬價格(元/千克)': pigs[1]}, index=range(1, len(pigs[0]) + 1))
else:
pig = pd.DataFrame({'豬肉價格(元/千克)': pigs[1]}, index=range(1, len(pigs[0]) + 1))
i+=1
#控制循環(huán)時間,3秒循環(huán)一次
time.sleep(3)
#pandas合并DataFrame
pork = pd.concat([small_pig,live_pig,pig],axis=1)
print(pork)
#存儲到硬盤
pork.to_excel('bj_pork.xlsx')
謝謝大家,請多指教!
總結(jié)
以上是生活随笔為你收集整理的python爬取知乎live_python爬虫——xml数据爬取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴忠军 - 如何理解马云所说的月入
- 下一篇: python 离散数据时间序列图_每个人