爬虫小技巧

640?wx_fmt=gif

爬虫小技巧

首先问一下大家都使用过哪些python爬虫模块呢?相信大多数人会回复requests或者scrapy吧,嗯我是说大多人。但是针对简单的爬虫我们还是习惯性的使用requests吧,或者升级版的requests_html,此时再使用scrapy,就有种杀鸡焉用宰牛刀的意味了。

现在我们有个简单的要求,去获取该网页http://www.air-level.com/air/beijing/的一个表格数据,然后保存起来。
相信此时很多人应该拿起requests敲起来了吧。这里由于代码比较简单就说下思路。
首先,我们要成功访问该网页,然后解析网页表格里面的内容,然后存储数据,这里简单我们就存csv好了。好了思路好了我们就可以写自己代码了,如果对xpath解析数据不很熟悉,应该会稍微耗点时,人生苦短,对于这么简单的任务怎么能浪费过多的时间呢?

经过调查我找到了应对这种静态单页面的更好的方法。。。

pandas模块

简介

提到pandas更多联想到也许是它的数据分析功能,但是在查它的api的时候我发现了这个方法
read_html:
下面是这个函数及其参数

pandas.read_html(io, match='.+', flavor=None, header=None, index_col=None, skiprows=None, attrs=None, parse_dates=False, tupleize_cols=None, thousands=', ', encoding=None, decimal='.', converters=None, na_values=None, keep_default_na=True, displayed_only=True)

https://pandas.pydata.org/**

安装
pip3 install pandas
爬虫代码
import pandas as pd
df = pd.read_html("http://www.air-level.com/air/beijing/", encoding='utf-8',header=0)[0]
results = df.T.to_dict().values()

print(results)

然后我们看到输出一个mapping映射类型的数据

dict_values([{'监测站''北京天坛''AQI': 177, '空气质量等级''中度污染''PM2.5''134 μg/m3''PM10''176 μg/m3''首要污染物''PM2.5'}, {'监测站''北京顺义新城''AQI': 167, '空气质量等级''中度污染''PM2.5''127 μg/m3''PM10''163 μg/m3''首要污染物''PM2.5'}, {'监测站''北京农展馆''AQI': 155, '空气质量等级''中度污染''PM2.5''118 μg/m3''PM10''170 μg/m3''首要污染物''PM2.5'}, {'监测站''北京奥体中心''AQI': 152, '空气质量等级''中度污染''PM2.5''116 μg/m3''PM10''132 μg/m3''首要污染物''PM2.5'}, {'监测站''北京东四''AQI': 150, '空气质量等级''轻度污染''PM2.5''115 μg/m3''PM10''145 μg/m3''首要污染物''PM2.5'}, {'监测站''北京海淀区万柳''AQI': 142, '空气质量等级''轻度污染''PM2.5''109 μg/m3''PM10''143 μg/m3''首要污染物''PM2.5'}, {'监测站''北京万寿西宫''AQI': 142, '空气质量等级''轻度污染''PM2.5''109 μg/m3''PM10''143 μg/m3''首要污染物''PM2.5'}, {'监测站''北京古城''AQI': 137, '空气质量等级''轻度污染''PM2.5''105 μg/m3''PM10''120 μg/m3''首要污染物''PM2.5'}, {'监测站''北京官园''AQI': 137, '空气质量等级''轻度污染''PM2.5''105 μg/m3''PM10''144 μg/m3''首要污染物''PM2.5'}, {'监测站''北京怀柔镇''AQI': 121, '空气质量等级''轻度污染''PM2.5''92 μg/m3''PM10''143 μg/m3''首要污染物''PM2.5'}, {'监测站''北京定陵''AQI': 114, '空气质量等级''轻度污染''PM2.5''86 μg/m3''PM10''92 μg/m3''首要污染物''PM2.5'}, {'监测站''北京昌平镇''AQI': 104, '空气质量等级''轻度污染''PM2.5''78 μg/m3''PM10''109 μg/m3''首要污染物''PM2.5'}])

代码很简单但是实现的内容可不简单,第一行导入pandas包,
第二行的read_html核心功能实现是调用requests然后解析table标签里的每个td的数据
最后生成一个list对象里面是dataframe对象。所以通过小标0获取它的第一个dataframe数据,既然是dateframe我们就可以使用dataframe的方法了,
第三行首先做了个转秩操作,然后转为映射类型打印出来了。上面的代码为了演示其效果,下面我们对结果做一个存储操作

存入csv
df = pd.read_html("http://www.air-level.com/air/beijing/", encoding='utf-8',header=0)[0]
df.to_csv("tq.csv",index=False)

执行代码之后就生成了tq.csv了,打开时候看正是我们要的数据。
让我们对比一下这是网页的数据:

640?wx_fmt=png
网页内容

这是我们保存的csv数据
640?wx_fmt=png
csv数据

可以发现我们成功的获取了网页表格的数据。


需要注意的是,read_html只能解析静态页面。

怎么样,简单不,赶紧动手试一试吧。

随机推荐,偶遇精彩

1

PEP525--异步生成器

2

数据分析|鬼畜视频改革春风吹满地火在哪里

3

asyncio之Coroutines,Tasks&Future

4


PEP530--异步推导式


致转行AI的在校大学生的一封信


转行AI需要看的一些文章


转行学AI,具体细分方向如何选,来自一线工程师的感悟


用法律武器,痛击腾讯侵权行为!!!湾区人工智能可以改善知识产权现状吗?


【送书PDF】Python编程从入门到实践


Python从入门到精通,深度学习与机器学习资料大礼包!


【免费】某机构最新3980元机器学习/大数据课程高速下载,限量200份



640?wx_fmt=png



640?wx_fmt=png


觉得不错, 请随意转发,麻烦点个在看!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值