博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个爬虫小技巧
阅读量:6623 次
发布时间:2019-06-25

本文共 2739 字,大约阅读时间需要 9 分钟。

爬虫小技巧

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

现在我们有个简单的要求,去获取该网页的一个表格数据,然后保存起来。

相信此时很多人应该拿起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)

**

安装

pip3 install pandas

爬虫代码

import pandas as pddf = 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了,打开时候看正是我们要的数据。

让我们对比一下这是网页的数据:
网页内容
这是我们保存的csv数据
csv数据
可以发现我们成功的获取了网页表格的数据。

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

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

同步来源:微信公众号python学习开发

博客园:

转载地址:http://jltpo.baihongyu.com/

你可能感兴趣的文章
Oracle RAC安装过程中碰到的“坑”和关键点(一)
查看>>
如何让你的传输更安全——NIO模式和BIO模式实现SSL协议通信
查看>>
【云计算的1024种玩法】使用 NAS 文件储存低价获得好磁盘性能
查看>>
H.264学习笔记之一(层次结构,NAL,SPS)
查看>>
Radware:IP欺诈等让网络攻击难以防范
查看>>
基于Token认证的WebSocket连接
查看>>
【Solidity】2.合约的结构体 - 深入理解Solidity
查看>>
《Drupal实战》——2.6 小结
查看>>
《C语言及程序设计》实践参考——二分法解方程
查看>>
java thread中的wait()和notify()
查看>>
2016最新搜索引擎优化(SEO)重点要素
查看>>
当Web访问性能出现问题,如何深探?
查看>>
【IOS-COCOS2D-X 游戏开发之二】【必看篇】总结阐述COCOS2D-X与COCOS2D-IPHONE区别;
查看>>
eoLinker-API_Shop_通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等...
查看>>
前端面试回忆录 - 滴滴篇 - 凉面
查看>>
jxl导入Excel 切割List 并使用MyBatis批量插入数据库
查看>>
小程序开发总结
查看>>
Tomcat监听器设计思路
查看>>
管理ORACLE实例
查看>>
Confluence 6 MySQL 数据库设置准备
查看>>