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')

谢谢大家,请多指教!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值