python爬取知乎live_python爬虫——xml数据爬取
回想去年寫畢業論文時候需要數據,雖然數據量不大,但是手工錄入,也是頗費眼神。現在自學了Python,就拿曾經的需求當做案例吧!
爬取目標:最近20年每個月的仔豬價格,生豬價格和豬肉價格
爬取軟件:python 3.7.2 IDE:PyCharm
爬取包:requests, pandas ,lxml, time
打開如下部分:
打開檢查,如下圖
很好,數據就在最后的大紅框里面,分別對應著時間和價格。有前端基礎一眼就能看出這是一個xml文檔.html為樹結構,xml也是樹結構,因此我們可以像解析html一樣解析xml。到這里我們就可以爬取仔豬價格數據了。
還有生豬價格和豬肉價格沒爬取呢,別急,看一下網址構造:
發現這個鏈接變化之處有兩個地方,因此可以構建一個dict以構造多個URL。循環每個URL,請求,解析,存儲為bj_prok.xlsx
pigdata ={'smallpig':1565318072807,'livepig':1565327925160,'pork':1565328013572}
最終爬取效果(展示部分):
全部代碼如下:
import requests
from lxml import etree
import pandas as pd
import time
#構造字典
pigdata ={'smallpig':1565318072807,'livepig':1565327925160,'pork':1565328013572}
#構造函數get_info,解析網頁
def get_info(link):
#請求url
res = requests.get(url)
#轉換類型
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():
#構造url
url = 'http://www.caaa.cn/market/trend/local/xml/2-1-{type}.xml?&XMLCallDate={num}'.format(type=pigtype,num=pignum)
# print(url)
#調用函數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
#控制循環時間,3秒循環一次
time.sleep(3)
#pandas合并DataFrame
pork = pd.concat([small_pig,live_pig,pig],axis=1)
print(pork)
#存儲到硬盤
pork.to_excel('bj_pork.xlsx')
謝謝大家,請多指教!
總結
以上是生活随笔為你收集整理的python爬取知乎live_python爬虫——xml数据爬取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴忠军 - 如何理解马云所说的月入
- 下一篇: 开发者应警惕的七种糟糕职业规划错误