浅析Python网络爬虫
2020-12-14陈超
摘 要:网络爬虫(Web Spider)又称网络蜘蛛、网络机器人,是一段用来自动化采集网站数据的程序。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。Python适用于网站、桌面应用开发,自动化脚本,复杂计算系统,科学计算,生命支持管理系统,物联网,游戏,机器人,自然语言处理等很多方面。本文简要介绍对于定向信息采集所需了解基本知识和相关技术,以及python中与此相关的库,同时提供对与数据抓取有关库的封装实现。
一、应用场景
爬虫技术在科学研究、Web安全、产品研发、舆情监控等领域可以做很多事情。如:在数据挖掘、机器学习、图像处理等科学研究领域,如果没有数据,则可以通过爬虫从网上抓取;在Web安全方面,使用爬虫可以对网站是否存在某一漏洞进行批量验证、利用;在产品研发方面,可以采集各个商城物品价格,为用户提供市场最低价;在舆情监控方面,可以抓取、分析微博的数据,从而识别出某用户是否为水军。
二、运行流程
对于定向信息的爬取,爬虫主要包括数据抓取、数据解析、数据入庫等操作流程。其中:(1)数据抓取:发送构造的HTTP请求,获得包含所需数据的HTTP响应;
(2)数据解析:对HTTP响应的原始数据进行分析、清洗以提取出需要的数据;
(3)数据入库:将数据进一步保存到数据库(或文本文件),构建知识库。
三、相关技术
爬虫的相关技术包括:
(1)数据抓取:了解HTTP请求和响应中各字段的含义;了解相关的网络分析工具,主要用于分析网络流量,如:burpsuit等。一般情况,使用浏览器的开发者模式即可;
(2)数据解析:了解HTML结构、JSON和XML数据格式,CSS选择器、Xpath路径表达式、正则表达式等,目的是从响应中提取出所需的数据;
(3)数据入库:MySQL,SQLite、Redis等数据库,便于数据的存储;
以上是学习爬虫的基本要求,在实际的应用中,也应考虑如何使用多线程提高效率、如何做任务调度、如何应对反爬虫,如何实现分布式爬虫等等。
四、python相关库
在爬虫实现上,除了scrapy框架之外,python有许多与此相关的库可供使用。其中,在数据抓取方面包括:urllib2(urllib3)、requests、mechanize、selenium、splinter;在数据解析方包括:lxml、beautifulsoup4、re、pyquery。
对于数据抓取,涉及的过程主要是模拟浏览器向服务器发送构造好的http请求,常见类型有:get/post。其中,urllib2(urllib3)、requests、mechanize用来获取URL对应的原始响应内容;而selenium、splinter通过加载浏览器驱动,获取浏览器渲染之后的响应内容,模拟程度更高。
具体选择哪种类库,应根据实际需求决定,如考虑效率、对方的反爬虫手段等。通常,能使用urllib2(urllib3)、requests、mechanize等解决的尽量不用selenium、splinter,因为后者因需要加载浏览器而导致效率较低。
对于数据解析,主要是从响应页面里提取所需的数据,常用方法有:xpath路径表达式、CSS选择器、正则表达式等。其中,xpath路径表达式、CSS选择器主要用于提取结构化的数据,而正则表达式主要用于提取非结构化的数据。相应的库有lxml、beautifulsoup4、re、pyquery。
五、反爬虫
1. 基本的反爬虫手段,主要是检测请求头中的字段,比如:User-Agent、referer等。针对这种情况,只要在请求中带上对应的字段即可。所构造http请求的各个字段最好跟在浏览器中发送的完全一样,但也不是必须。
2. 基于用户行为的反爬虫手段,主要是在后台对访问的IP(或User-Agent)进行统计,当超过某一设定的阈值,给予封锁。针对这种情况,可通过使用代理服务器解决,每隔几次请求,切换一下所用代理的IP地址(或通过使用User-Agent列表解决,每次从列表里随机选择一个使用)。这样的反爬虫方法可能会误伤用户。
3. 希望抓取的数据是如果通过ajax请求得到的,假如通过网络分析能够找到该ajax请求,也能分析出请求所需的具体参数,则直接模拟相应的http请求,即可从响应中得到对应的数据。这种情况,跟普通的请求没有什么区别。
4. 基于JavaScript的反爬虫手段,主要是在响应数据页面之前,先返回一段带有JavaScript代码的页面,用于验证访问者有无JavaScript的执行环境,以确定使用的是不是浏览器。
六、结论
网络爬虫不仅能够为搜索引擎采集网络信息,而且还可以作为定向信息采集器,定向采集某些网站下的特定信息。而随着近几年来的发展,python的受欢迎度也越来越高,而它的运用的领域也是越来越多,比如人工智能和大数据等领域,python都是在其中扮演者重要的角色。
参考文献:
[1] 《Python程序设计与算法基础教程》. 江红,余青松 主编. 清华大学出版社. 2018.
[2] 《Python成型设计案例教程——从入门到机器学习》. 张思民 编著. 清华大学出版社. 2018.
[3] 基于Python的网络爬虫技术[J]. 钱程,阳小兰.黑龙江科技信息. 2016,36:273.
[4] 基于Python的专业网络爬虫的设计与实现[J].姜杉彪,黄凯林. 企业科技与发展. 2016,08.
[5] 基于Python的网络爬虫技术研究[J]. 王碧瑶. 数字技术与应用. 2018.05.
[6] 网络爬虫技术研究[J]. 于成龙. 东莞理工学院学报. 2011.06.
[7] 《网络爬虫-Python和数据分析》.王澎. 中国科技大学. 2018.06 .
作者简介:
陈超,性别:男,出生年月:1981.07,籍贯:重庆,单位:攀枝花学院,职称:讲师,学历:硕士,研究方向:数据分析和挖掘。