Python实战案例:爬取中国执行信息公开网 您所在的位置:网站首页 中国执行公开网信息网个人查询 Python实战案例:爬取中国执行信息公开网

Python实战案例:爬取中国执行信息公开网

2023-12-09 09:52| 来源: 网络整理| 查看: 265

从面试题谈起

谈到这个项目的爬虫,就要从一道面试题谈起了。

这道面试题是:

请写一个爬虫从网址 http://zxgk.court.gov.cn/shixin/,检索被执行人姓名:"阿里",并填入验证码后查询,抓取结果列表,与对应的详情,并将内容导出为csv。

根据这道面试题的情境,进入到地址http://zxgk.court.gov.cn/shixin/,在“被执行人姓名/名称”后面的输入框中输入“阿里”,再输入验证码,点击红色的“查询”按钮。如下图所示。

现在需要抓取的是查询后的结果数据,如下图所示。

问题的分析

首先必须明确这些数据是点击查询后出现的动作,可以先审阅代码,在”查询"按钮的地方右键”查看元素",找到点击这个按钮后发生了什么样的动作.如下图所示。

从图形反蓝处可以看到html代码的button元素在onclick方法中有一个search()方法.这个search方法就应该是查询的动作.可以通过查看网页源码找到search方法.

在整个网页空白处右键"查看页面源代码",从”源代码"中搜索出search方法,看一下search方法实现逻辑.如图所示.

从图中,可以看到search方法中有一个ajax的请求,ajax请求的url地址可以看到是searchSX.do。这个地址可以从网页“查看元素”的“Network”或网络中可以查看一下这个请求最终的响应结果是什么样的数据。如下图所示。

由上图中可以看到左边接口地址searchSX.do,对应的右边的响应结果是阿里最终的查询结果。通过这样的分析,以这里只需要知道接口请求的请求头中需要哪些信息即可。如图所示。

如上图所示,在右边的窗口中点击:“消息头”,就可以看到请求头中的相关内容。在请求头中有很多项。

第一项:

Acceptapplication/json,text/javascript,*/*;q=0.01

这是Accept客户端能够接受的MIME的类型。在爬虫请求时可以忽略不设置。

第二项:

Accept-Encoding:gzip, deflate

这是客户端允许的编码,也可以在爬虫请求时忽略不设置。

第三项

Accept-Language:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

这是客户端允许的语言,一般在中国,都是简体中文,爬虫请求时也可以忽略不设置。

第四项

Connection:keep-alive,

这是保持连接,爬虫爬取时也可以忽略不设置。

第五项:

Content-Length:114,

这是内容的长度,针对本次爬取,爬取可以不设置这个选项。

第六项:

Content-Type:application/x-www-form-urlencoded; charset=UTF-8,

这句标志内容类型,针对本次爬取,爬取时也可以不设置这个选项。

第七项:

Cookie:JSESSIONID=209355FD785AD8D13ED3CC281CF82703; _gscu_15322769=97140202rxdu1031; Hm_lvt_d59e2ad63d3a37c53453b996cb7f8d4e=1605270782; _gscs_15322769=05270772nwfrfu31|pv:4; _gscbrs_15322769=1; Hm_lpvt_d59e2ad63d3a37c53453b996cb7f8d4e=1605271679,

这句是访问这个网站时产生的,这一项必须包括在内,不然爬虫可能爬取不到相关的内容。

第八项:

Host:zxgk.court.gov.cn

主机名字,这个选项在爬取时可以不设置这个选项。

第九项:

Origin:http://zxgk.court.gov.cn,

这个选项爬取时也可以不设置。

第十项:

Referer:http://zxgk.court.gov.cn/shixin/,

如果目标爬取的网站做过盗链的条件下,这个选项是必须要进行设置的.

第十一项:

User-Agent:Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0,

爬取网站时模拟浏览器的客户端动作,这个选项有助于防止服务器进行反爬,也决定了这个选项是必须要进行设置的.

通过以上的分析,请求头必须有的选项定义headers字典如下.

headers={ “User-Agent”:“Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0”, “referer”:“http://zxgk.court.gov.cn/shixin/”, “cookie”:“JSESSIONID=209355FD785AD8D13ED3CC281CF82703; _gscu_15322769=97140202rxdu1031; Hm_lvt_d59e2ad63d3a37c53453b996cb7f8d4e=1605270782; _gscs_15322769=05270772nwfrfu31|pv:4; _gscbrs_15322769=1; Hm_lpvt_d59e2ad63d3a37c53453b996cb7f8d4e=1605271679” }

接下来再点击“查看元素”中“network”或“网络”选项卡的右边“请求”的标签,如下图所示。

从图中可以看到,请求的表单数据中是包括了如下的字典参数,可以用params变量来保存这个字典变量参数。

params={ “pName”:“阿里”, “pCardNum”:“”, “pProvince”:“0”, “PCode”:“wxab”, “captchaId”:“oQDKheA200LTk4fC3PImakpFcqhbeiig”, “currentPage”:“1” }

在以上这个字典参数中,pName就是搜索的关键词,pCode就是对应的验证码,pCardNum、pProvince这两个参数不起什么作用,currentPage是页码的问题,关键是captchaId这个参数到底是个什么东西是值得研究的问题。

针对于capchaId的研究只能针对源码进行。通过“查看网页源代码”,可以看到如下图所示的代码。

从上面截取的代码上看,是能够找到captchaId,并且capthaId的值就是uuid的值进行了repace()方法的替换得到了.那么uuid是如何产生的呢?就是function getNum()中的方法得到了.只要把function getNum()的方法用Python的语言写出来就可以了.

Python语言改写前端函数

function getNum()中的方法是前端的语言,把前端转成Python语言可以遵循以下的原则.

(1)把function字母改成def。

(2)把var赋值语句中的var去掉。

(3)把for循环的格式如for(var i=0;i



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有