Python爬虫系列:(一)预备知识

编者按

本文针对的读者是没有爬虫编写经验的同学,因为本文讲的是基础知识


概念

网络爬虫是什么?它能干什么?

简单说网络爬虫就是采集网站数据的一种工具,最著名的就是google搜索引擎了;它主要的工作就是采集我们想要的数据,如今是数据的时代,有了一定规模的数据是可以做很多有趣或者有意义的事情的。


理论知识

1.Http协议:需要理解Http协议的请求方法,Http协议状态码,Http协议的头部。下面做具体说明:

a)请求方法。Http协议中文名为超文本传输协议,现在大多数web应用都遵守该协议,当然现在更安全的还有Https协议。我们编写爬虫时,会对目标站点发送Http请求(Get/Post等),然后等待服务器响应请求后就能获取到我们需要的内容了。Http请求的作用就是让服务器知道你想获取它的资源,如果是权限范围之内的,它就会返回给你。Get请求一般是用于请求一个页面,而Post请求常用于提交表单,当然两者还有其它区别,比如Get请求有字符长度限制,比起Post请求更不安全,Get请求可以带Cookie以应对用户禁用cookie的情况。

b)状态码。状态码是服务器返回给浏览器的一串数字,比如返回正常,那么状态码就是2xx,常见的是200,还有4xx表示用户请求不合法,比如404,就是用户请求的资源已经不在服务器上了,5xx表示服务器内部错误,如果你的网站数据库宕机了,就可能会出现500的错误,3xx表示资源重定向,比如你请求的是"http://www.baidu.com", 它会把你定向到"https://www.baidu.com"

c)协议头部。协议头部也是一个比较重要的知识。我们用手机浏览器或者PC浏览器访问微博的时候,访问的页面为何不同?因为我们在请求的时候就带了User-Agent这个标识,比如:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36

这个就是我电脑的chrome浏览器的信息,在发送Http请求的时候,Http头部就会带上它。下图就是一个具体的Http头部:

我们主要关心的是User-Agent,"Referer""Cookie"。User-Agent(以后都简称UA)和Referer主要用于避开服务器的反爬虫机制(关于反爬虫机制,以后我会专门来讲一下),比如说当你直接用Requests库(python的http库,以后我们会用到)请求,可能User-Agent就是‘requests...’/'httpclient'等Http库的UA,有的Web站点直接就不给你返回数据了;referer用在反盗链,意思就是目标站点会判断你是否是它自己指定的某个连接跳转过来的,如果不是就不给你返回正确数据,比如上图的referer表示我们是从“http://www.rookiefly.me” 跳转过来的。Cookie,则是验证用户身份信息的重要标识,这个在涉及到需要登陆其它权限的时候非常重要,所以下文会有详细介绍。

至于Http的相关知识我就写到这里了,编写爬虫已经够用了,如果想深入了解,推荐阅读《图解Http协议》,百度云链接点这里,密码是:azv2.这本书是mobi格式,可以用kindle看,如果没有kindle,可以安装E-book viewer查看。


2.Python和它的Requests库。

Python大家都应该知道吧,是一门编程语言。而Requests是Python的第三方库,号称是"HTTP for Humans",很好用的Http库。比如我们需要抓取百度首页,只需要一行代码就可以搞定了:

requests.get('http://www.baidu.com').text

是不是很简单很强大呢!至于更详细的用法,我会在具体的代码中进行讲解,大家也可以查看Requests的官方文档来进行了解和学习:Requests中文官方网站.这里就不加赘述了。


3.Cookie和Session

关于Cookie和Session的知识点,也是需要了解的,我在这里讲一下,重点讲解Cookie。Cookie是存储在客户端的用来标识用户身份的字符串,Cookies由一系列的键值对组成。比如前面图上的各个键值对。之所以网站可以在你关闭浏览器之后,下次打开免登陆,就是Cookie在起作用。所以如果别人拿到你的微博Cookie,即便是不知道你的密码,也可以进入你的账号,因此不要随便把Cookie泄露了。Cookie有一个过期时间,比如常见的7天内免登陆,说明它的Cookie过期时间为7天。同一站点不同键名的Cookie过期时间可能不同,如果是使用的chrome浏览器,可以添加editthiscookie这个插件查看各个Cookie的过期时间,firebug也是可以查看的。Cookie的相关知识现在就讲到这里,以后会讲到用它来进行模拟登陆,甚至有的网站会将Cookies中的部分键的值加密,然后获取某些信息。以后分析QQ空间的用户资料采集就会用到这个。由此可见,掌握Cookie的相关知识,对于编写网络爬虫来说是非常重要的。Session中文名是会话,是存储在服务器的相关凭证。关于Session的详细知识,我这里就不多讲了,在web编程中会用得比较多,但是web爬虫用得较少。


4.抓包工具Fidder或者HttpAnalyzer7

抓包工具用于抓取HTTP请求,用于分清楚用户和服务器交互的具体过程,便于模拟我们编写爬虫。我这里推荐两款windows下的http抓包工具:fidder和httpanalyzer7,至于选哪款,完全是看个人习惯,我个人比较喜欢使用httpanalyzer7,因为fidder抓的包比较杂,而httpanalyzer7本来就将各个http请求按浏览器的不同而分类。下面是两款抓包工具的下载链接:

1.fidder

2.httpanalyzer7 ,密码:ov9b

磨刀不误砍柴工,基本关于网络爬虫的预备知识都涉及到了,下一篇文章将进行实站:模拟登陆慕课网