“ 我相信有相当大部分人,学习python最初动机,就是做一个网络爬虫,虽然python的主要强项是数据分析方面(至少我是这样认为的),但这并不妨碍它成为目前最主流的网络爬虫编写语言。”
网络爬虫是什么?
——网络上一切看得见的,或看不见的数据,无论是用浏览器还是App或是其他工具打开的,只要是数据,理论上都是通过“数据包”的形式在网络上传播的,爬虫就是用一堆代码,去获取那些数据包,然后把它们解析成我们能看得懂的样子。
好像比较拗口……,再用大白话说一次:爬虫,就是数据获取工具。而且,出于各种原因,大家最好在正式场合不要说“爬虫技术”,而要说“数据获取技术”。
正式开始,先介绍一下python在数据获取方面,我常用的包有哪些:
requests 用于获取页面的原始代码
lxml(etree) 用于对网页标签进行定位,可以解析出需要的数据
bs4(BeautifulSoup) 同上,最早的爬虫包,现在用的少了,但在某些场景还是有它的用处
selenium(webdriver) 模拟浏览器,应付比较多渲染效果、有用户登录或验证码的场景
在掌握了常用的包之后,数据获取的大致流程如下(以获取网站数据举例):
首先了解自己需要的数据是哪些,百度一下这些数据大概都在哪些网站上有,迅速人工浏览一下这些目标网站的首页和内页情况,观察一下页面的复杂程度、是否有大量渲染效果、是否有用户登录、是否需要验证码……等等,然后确定一个最终的目标网站,要求是在拥有我们需要的数据的前提下,数据获取难度相对较小。
用requests(或webdriver)把页面获取下来(如果有渲染、用户登录或验证码,就需要使用相应工具处理后才能获取到),对目标网站的网页代码进行分析,定位出我们需要的数据,并把这些数据用dict类型或list类型组织起来,形成对我们有用的数据包。
把组织好的数据,存到mongoDB或excle、txt文件里面去,方便我们使用。
做完这些,爬虫基本上就做完了。通常一个爬虫代码,只能用于一个网站,我们通常称负责页面解析的代码为“爬虫模板”。网站页面的代码如果发生更新,会导致爬虫模板不能获取到正确的数据,甚至直接报错,需要对爬虫模板进行相应的更新。对于需要持续获取数据的爬虫,这个“博弈”过程会反复出现。
循例,我们还是上一个例子,来简单介绍一下上面的流程:
第一步 确定需求、确定目标网站: