一个爬虫小技巧

简介: 一个爬虫小技巧

爬虫小技巧

首先问一下大家都使用过哪些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了,打开时候看正是我们要的数据。
让我们对比一下这是网页的数据:
网页内容
这是我们保存的csv数据
csv数据
可以发现我们成功的获取了网页表格的数据。

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

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

同步来源:微信公众号python学习开发
博客园:http://www.cnblogs.com/c-x-a

目录
相关文章
|
10天前
|
数据采集 Web App开发 安全
爬虫
该文介绍了爬虫的基础知识,包括爬虫的定义(通过编程模拟浏览器抓取网络数据)、价值(实际应用和就业需求)、法律地位(合法但有违法风险,分为善意和恶意爬虫)以及可能带来的风险(影响网站运营和触犯法律)。为避免问题,建议优化程序、审查抓取内容。爬虫类型包括通用、聚焦和增量式爬虫。文中还提到了反爬与反反爬策略,以及robots.txt协议作为网站数据爬取的君子协定。此外,讨论了HTTP协议(包括User-Agent和Connection)和HTTPS协议的安全性及加密方式。
14 0
|
4月前
|
数据采集 搜索推荐 数据挖掘
爬虫应用
爬虫应用
33 2
|
7月前
|
数据采集 数据安全/隐私保护 索引
爬虫学习
爬虫学习
|
数据采集 存储 JSON
一文学会爬虫技巧
作为冷数据启动和丰富数据的重要工具,爬虫在业务发展中承担着重要的作用,我们业务在发展过程中积累了不少爬虫使用的经验,在此分享给大家,希望能对之后的业务发展提供一些技术选型方向上的思路,以更好地促进业务发展
一文学会爬虫技巧
|
数据采集 消息中间件 Web App开发
爬虫介绍-queryao详细介绍|学习笔记
快速学习爬虫介绍-queryao详细介绍
136 0
爬虫介绍-queryao详细介绍|学习笔记
|
数据采集 存储 机器学习/深度学习
爬虫系列:爬虫介绍
在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,爬虫技术已经成为满足个性化网络数据需求的最佳实践。
247 0
爬虫系列:爬虫介绍
|
Web App开发 数据采集 JavaScript
爬虫问题总结
本文档对日常学习中用 python 做数据爬取时所遇到的一些问题做简要记录,以便日后查阅,部分问题可能因为认识不到位会存在一些误解,敬请告知,万分感谢,共同进步。 估算网站规模 该小节主要针对于整站爬取的情况。
1786 0
|
数据采集 Java 索引
gecco爬虫
http://www.geccocrawler.com/intro/ Gecco是一款用java语言开发的轻量化的易用的网络爬虫,不同于Nutch这样的面向搜索引擎的通用爬虫,Gecco是面向主题的爬虫。
946 0
|
数据采集 移动开发 C#
|
Web App开发 数据采集 iOS开发