Python爬虫|深入请求(一):概述

CPP Python系列目录:zhuanlan.zhihu.com/p/21,这里可以找到Python系列历史文章哦~

从今天开始,我们会深入讨论爬虫的各个模块,并讲解一些爬虫完整实例看如何使用这些知识。其中,“深入网页请求”系列将会深入讨论各种反爬策略、动态网页请求和对应的HTTP协议的知识;“深入网页解析”将会讲各种各样的解析方式,包括静态网页和动态网页的解析 ,数据格式包括直接解析字符串、re解析、bs4解析、json解析等,也会专门说说各种翻页技巧;“深入数据储存”系列我们会继续介绍csv的一些用法,以及坑爹的文件编码问题,也会深入介绍SQL和NoSQL的使用。“深入并发/海量数据的爬取”系列我们会介绍进程、线程、协程等基本概念及其实现,并用来提高爬虫效率,可能会有分布式方面的讨论。“爬虫实例”系列会详细解读我们写过的爬虫,部分项目主程序会另开系列专门讲。

注:非商业转载注明作者即可,商业转载请联系作者授权并支付稿费。本人已授权“维权骑士”网站(rightknights.com)对我在知乎发布文章的版权侵权行为进行追究与维权。

------------------------萌萌哒的分割线------------------------


在爬虫入门系列第一讲(

zhuanlan.zhihu.com/p/21

),我们提到了爬虫的实现原理。但是到现在为止,我们都还没有讲如何做一个真正的爬虫。我们也没有讲到如果需要采集的数据量很大的时候,要怎么应对各种反爬制定反反爬策略。这个系列将会结合HTTP的知识,深入地探讨这些问题。这一讲我们先概述一下请求模块需要完善的细节。

一、下一轮爬虫的入口:URL的获取或者构造

入门第一讲我们提到,如果想扩展单页爬虫到多页爬虫,那么第一批爬虫就应该是入口,然后在爬的过程中获取新的入口。那么这个入口是什么呢?答案是显然的:URL。怎么获取呢?主要有两大类:直接解析网页、根据某种规则构造URL或者post的数据。实际情况也会常常结合两种办法是用。

直接解析网页是很简单的。比如,我们的入门第一讲的爬虫实例获取的URL,就可以作为下一轮的爬虫入口(如果你确实需要这些数据的话)。第三和第四讲也是同样。怎么选择这样的入口网页呢?一般情况下都是某些网站的首页或者一些集中着比较多的下一级数据的网页。找到这么一个你需要的就好。

构造URL稍微复杂,但这是一种非常好用的方法,我们的项目爬虫就大量地使用了这样的思路。构造URL一般情况是出现在把搜索页(比如百度、bing,或者Tmall、JD的搜索页面)当成入口,然后通过把需要的参数拼上去来实现批量构造下一级入口。这样不仅程序更稳定、开发高效,而且可拓展性更好,如果可以使用尽量使用这样的思路。我们会在第二讲介绍URL的语法并结合实例讲解URL的构造。

二、反爬策略概述

反爬是所有爬虫都绕不开的坑,也是一个和网站斗智斗勇的过程。反爬策略的制定是要基于对HTTP协议的深入理解,所以后面的反爬策略我们会结合HTTP协议的知识来解释。这里先简单列举一些反爬技巧。事实上动态网页爬虫也可以算是反爬的一种,思路也是非常相似。

在讲解这部分之前,我们先介绍一些开发者工具的更深的用法。以这个网页为例:

wise.xmu.edu.cn/people/

。我们右键点击“审查元素”,然后点击第二个Network,这时候你是什么都看不到的。点击刷新,然后再回来,就看到了这个:

注意一下All那一排的东西。有三个部分的数据最重要:Document,Scripts,XHR。一般来说,如果是静态页面,直接可以在Document里面找到;如果是动态页面,就要在XHR和Scripts里面找。怎么读呢?我们点开一个:

headers里面就是请求和响应报文。这是反爬的关键。挂UA、挂代理、挂Cookie都要在请求头里面完成。

preview或者reponse可以看到返回数据。同样的方法一个一个找,找到需要的数据,就可以找到入口了。对于Ajax加载的很大一部分数据都要使用这样的办法找。一般情况下,XHR里面是json数据,这里面最多;其次会出现在一些scripts也就是js脚本里面。这就是很大一部分动态网页爬虫的基本方法。如果还无法解决,就需要深入读js脚本,或者直接使用浏览器模块(比如selenium等)。

第三讲,我们会介绍一种更高级的工具:抓包软件,并结合抓包软件讲解HTTP协议的过程;第四讲,我们会讲解代理UA、代理IP和代理Cookie,并讲解如何通过这些来实现反爬;第五讲,我们会讲解动态网页爬虫的请求方法;第六讲,我们会讲解APP爬虫的请求方法。解析方法将会在“深入解析”系列详细讲述。

------------------------萌萌哒的分割线------------------------


更多项目介绍,请关注我们的项目专栏:China's Prices Project - 知乎专栏

项目联系方式:

发布于 2016-06-30 20:20