爬虫技术,作为获取公开网站数据的关键手段,并非指无脊椎动物,而是指通过巧妙技巧从公开资源中“提取”信息的过程。个人而言,爬虫就像是利用一些小技巧,去合法获取一些公开的数据。我最初使用Java进行爬虫工作,但最近转向Python,对这项技术产生了浓厚兴趣,并已成功爬取多个网站的信息。尽管我还只是个Python新手,但希望通过交流学习,与大家一起进步。
首先,学习爬虫技术,cookie是绕不开的话题。Cookies在英文中解释为“会话”,而谈及cookies,就不得不提网络协议——http协议。http协议是一种无状态的协议(不了解的同学可以深入了解一下),客户端的普通请求大致分为三步:
- 客户端发送请求到服务器;
- 服务器处理请求;
- 服务器响应客户端。
这三步完成一次交互。但问题在于,当客户端再次向同一服务器发送请求时,服务器无法准确判断这次请求是否来自之前的浏览器或用户。为了解决这个问题,web服务器必须采用某种方式来唯一识别同一个用户,并记录该用户的状态。这种在一段时间内客户端与服务器多次交互的过程,我们称之为客户端会话。有了会话,我们就能轻松追踪请求来源,实现会话跟踪,记录用户行为。
在爬取数据时,除了使用代理或爬取百度高德poi等特定资源外,大部分情况下,如果我们要获取某个浏览器的接口数据,都需要携带cookies以保证登录信息,从而获取所需的接口数据。
接下来是http协议和cookie的作用,相对而言,Header则是HTTP请求的核心部分,它包含了客户端浏览器、请求页面、服务器等一系列相关信息。
当我们在浏览器(以谷歌为例)地址栏输入地址后,打开F12开发者选项,窗口中会出现类似以下的信息:

其中User-Agent属性较为重要,因为一般都需要添加该属性。对于做过反爬的网站,没有该属性是无法爬取的。该属性主要携带客户端使用的操作系统和浏览器的名称和版本信息。
当我们登录一些网站时,往往会看到友好的欢迎信息,列出操作系统的名称和版本等。这些信息通常是通过从User-Agent的请求头中获取到的。User-Agent请求头允许客户端将操作系统、浏览器等属性告诉服务器。例如,上述图中的“Mozilla/5.0”表示应用程序版本,“Windows NT 10.0 x64”表示操作系统Windows10 64位系统,还有浏览器版本等信息。
发送请求后,我们通常会收到状态码反馈是否成功:

接下来我们进入下一个模块——Requests模块。为什么要用这个模块?因为request可以“伪造”请求,无需通过浏览器直接发送数据,只需通过Python中的request来模拟浏览器发送请求。Requests模块是Python实现的简单HTTP库,与爬虫相关的其他库在使用前必须先引入该模块。当然,Python还提供了很多爬虫模块,如urllib、httplib等。但就目前而言,Requests模块是最流行、最简单的。对于复杂的网站或反爬厉害的网站,直接通过request往往不够,还需要其他模块的加入,如直接爬取源码解析或爬取前端代码属性值等。
准备:Python版本3以上,我用的工具是pychorm(破解版可微信公众号搜索获取),还要引入模块requests。以下是具体步骤:
- 首先在浏览器中登录爱企查,进入F12开发者选项,清空当前请求响应;
- 在输入框随便输入几个文字(某度主要是模糊查询);
- 此时会暴露出几个接口,可以看到suggest接口。点击该接口的响应response,可以看到接口下具体json类型信息(这是我们爬取的第一部分数据),还能看到pid(该字段关联了爱企查很多其他信息)。有了pid,就可以在爱企查获取绝大部分你想要的接口数据;
- 接下来按思路写代码爬取。
注意:找到刚刚获取到的接口suggest,右键copy–copy as url(bash),进入网页Convert curl commands to code生成cookies和头信息。然后将复制的接口粘贴进command选择python就能得到头和cookies信息了复制下面代码在编辑工具新建一个文件将代码粘贴即可此时就能获取到数据了为了提高容错性与健壮性除了添加代理以外还需要进行异常处理下面附上我之前用的代码第一步获取pid已经完成接下来继续获取专利信息首先随便搜索进入一家企业以北京百度为例打开F12清空所有页面接口等等信息找到知识产权专利信息进入点击清理所有接口信息选择页数此时就会暴露专利信息接口哈哈接下来驾轻就熟同样的步骤即可爬取专利不仅仅是专利信息哦基本所有的该页面接口信息都能拿捏同样附上我的简易代码此处没有做调试代理等等当初数据比较少就是为了快速干完没有考虑这些问题可以自行调整代码: