之前我们已经介绍过用Python可以辅助快速分析处理工作中遇到的数据表。随着时代的进步,网络成为大量数据的载体,我们有时需要从网上获取大量的信息资源进行分析,但是如何能够高效地获取需要的信息成了一个挑战。传统的搜索引擎可以帮助我们解决部分问题,但还有不少局限性。为此,程序员使用了“聚焦网络爬虫”,简单来说网络爬虫是一个自动获取初始网页上所有链接的程序,而聚焦爬虫更加智能,它能够根据设计者的要求有选择地访问万维网上的网页与相关的链接,经算法过滤后只获取需要的信息,这种爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,因此效率更高。
爬虫的基本工作流程分为四个步骤:发送请求,获取响应内容,解析内容,保存数据。发送请求:通过HTTP库向目标网站发送一个请求,等待响应;获取响应内容:服务器正常响应后能得到一个响应(Response),内容为获取页面的内容,可能是HTML、JSON字符或者二进制数据等类型;解析内容:得到的内容如果是HTML,可以通过正则表达式或网页解析库进行解析,如果是JSON字符可以直接转换为JSON对象解析,如果是二进制数据可以保存后作进一步处理;保存数据:把解析后的数据保存下来,可以是文本,也可以保存到数据库当中。
特别提醒你注意!因非法使用爬虫获刑的案件屡见不鲜,一定要合法合规使用爬虫工具,切记遵守以下原则:遵守 Robots 协议,限制爬虫频率,不强行突破反爬限制,只获取公开数据,禁止利用爬取数据牟利!如果你还抱有侥幸心理请一定先去看看中国裁判文书网上大量因非法利用爬虫而获刑的实际判例。
学习爬虫之前我们需要梳理一下编写爬虫需要用到的库和准备知识。
1.Requests模块:Requests是Python一种第三方模块,主要用于发送请求,支持HTTP连接池的连接保持,支持使用Cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化数据自动编码。在Python内置模块的基础上进行了高度的封装,使得Python进行网络请求时,变得人性化,使用Requests可以轻而易举地完成浏览器需要的任何操作。
2. BeautifulSoup也是一个受欢迎的Python第三方库,它是一款优秀的网页解析库,提供了很多接口帮助我们来处理导航、搜索、修改分析树,它的查找提取功能非常好用,能够节省程序员大量的时间。
3. 除此之外你还要掌握一定的HTML+CSS网页知识内容,这是理解Python爬虫的基础,想要自己编写爬虫程序就需要提前学习这方面的知识。
今天我们就以爬取浙江地区天气情况为例,获取日期(周/日)、浙江天气(多云/晴/雨)、风力(风向/级数)……
使用中国天气网作为数据源,进入当地天气页面,对浙江地区的天气进行查询,选择七天天气变化,表格中会出现七天天气变化包括日期、温度、风向……接着我们在右键页面检查网页源代码(根据浏览器不同快捷键可能是F12或Ctrl+Shift+F)进入如图1的页面。
有HTML基础的可以直接在网页源代码中找需要的信息标签,也可以点击左上方的鼠标按钮,开启快速查找,点击图1网页中7天天气信息定位到该信息的网页源代码,右边代码框中用红框圈出的部分就是目标数据。
下面開始对网页目标区域代码进行解析,我们通过Python的BeautifulSoup的方法来锁定信息,先找到对应id和class的div,然后再找到ul中class为“t clearfix”的部分,其中所有的li标签中的内容就是我们的目标。div相当于一个整体的框键,而li相当于框架中的七个小框键用来存放每一天的天气数据。
接下来分析li中的内容,再次通过BeatifulSoup来进行数据的解析,我们把weathers中的日期、天气、温度、风力的信息通过class名字获取。采用遍历的方式每次获取一个标签,最后输出相应的内容,然后存放在文档中。
代码如下:
首先导入需要的库requests和BeautifulSoup。接下来设置保存路径save,这里存放在了我的电脑桌面的bd.txt中,编码格式为utf-8。
接下来res就是我们通过网址用requests模块去获取的存有天气数据的网页101210404.shtml。
通过BeautifulSoup来搜索确定定位需要爬取的标签内容(id,ul,li),具体数值以网页分析为准。查找成功之后便可以锁定weather区域,通过循环将天气中的日期、天气、温度、风力信息通过class名字获取,获取到的值通过result全部累加叠合在一起,并且有序地输出到文本中并保存,作为数据源用于后续的分析处理。