python 网页翻页 url不变_什么情况?python这次居然被web scraper比下去了

8de38c5485241f961003f95ca31f98a9.gif 将永恒君的百宝箱 设为 星标  精品文章第一时间读

周末,永恒君和一位B站网友讨论交流了一下关于web scraper爬取网页的问题。今天来和各位分享一下,希望能给大家有帮助。

需求

1、爬取的网站地址:

http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=7bcf3b0574e320a487ada1f504759be4&s21=%E8%B5%94%E5%81%BF

2、需要抓取的信息

爬取文书列表内容,报告标题、文号、日期、摘要等等信息。

be5deda0a71fbac9f47dd93602f6f332.png

3、需要抓取多页,比如说前10页。

分析网站的情况

1、抓取的页面翻页的时候,url是不会变的。而在页面的源码当中又找不到内容,说明网页是通过异步加载的。

2、打开F12,就会弹出下面的暂停提示,阻止后续的查看。没事,点击右下角的取消断点,再运行即可。

fc641518890883d2473456cd12f50a7e.png

3、点击“network”,点击网页的第二页,查看请求的数据。

1e052e01e21728e0b055170c6d7581e5.png

可以看到,是post请求,后面需要有一堆的参数

21cf56f5085423a443da8475709e47d5.png

一般而言,通过这样请求之后,可以获取到真实的json文件,里面就包含了网页中文书的列表当中,然而这次却是不一样,请求得到的居然是加密的信息,还需要通过一定方式来进行解密才行。

aac3e58379b30ab0c12cce402197bdce.png

到这里,已经可以感受到网页开发人员的“苦心”,反爬的措施可谓是非常的多。不过,我还是在网上找到了一篇网友关于用python解决这上面问题的办法和代码,有需要的时候可以参考一下。这里有些内容在自己的能力圈之外,就暂时不考虑了。

https://blog.csdn.net/Since_you/article/details/100566633

web scraper爬取

用python比较复杂的话,那么就考虑用web scraper来试试。

python爬取的效率当然高,但是反爬的太厉害了,大部分的网站都会对python进行一定的限制和爬取,这样写代码的成本就无形增加了很多。

web scraper则不用考虑这么多,只要浏览器里面能看到数据,就能够进行爬取。

回头看看网站的情况:一是url不变,二是数据不在网页源码当中。那么就考虑“动态加载进行翻页”的这种情况,之前永恒君写过这个教程:传送门在这里

主要配置如图:

978ba90124f53828bc6336f99f076996.png

关键点就是"selector type"和"click selector"的配置

"selector type"(用于选择网页中的文书列表)选择"Element click"
"click selector"(用于翻页)这里需要注意,一般如果是直接在网页点选的话,得到的css代码是这样的

.left_7_3 a:nth-of-type(n+2)

表示的意思就是从第二个翻页器(上一页为第一个,1为第二个)开始点击,一直到最后一个。

aefe719df3a66044a184de907fb00bc5.png

因为这个url有非常多的页,比如,如果希望只取前5页的话,可以如下更改:

.left_7_3 a:nth-of-type(-n+6)
034a0c11cd79df0d4641f1860fb040ca.png

n的取值是从0开始的。

然后再在这个选择器下面,配置标题、文号、日期、摘要的选择器。

b8c24e608d88074f405c0f93e93d9c4e.png

最终的结构图就是这样的:

eaea703b90ca1f30d277f65325a90119.png

爬取的过程及结果就是这样的:

8af0f586d73778fa3e24aa694df059c7.gif
579a61861dd0851c54ddcfc28914ba68.png

这个方法相对python而言,节省的时间可不止一点点,结果基本上一致。

这里把上面的web scraper的配置也分享一下:

{"_id":"caipan","startUrl":["http://wenshu.court.gov.cn/website/wenshu/181217BMTKHNT2W0/index.html?pageId=7bcf3b0574e320a487ada1f504759be4&s21=%E8%B5%94%E5%81%BF"],"selectors":[{"id":"list","type":"SelectorElementClick","parentSelectors":["_root"],"selector":"div.LM_list:nth-of-type(n+3)","multiple":true,"delay":0,"clickElementSelector":".left_7_3 a:nth-of-type(-n+4)","clickType":"clickOnce","discardInitialElements":"do-not-discard","clickElementUniquenessType":"uniqueText"},{"id":"title","type":"SelectorLink","parentSelectors":["list"],"selector":"a.caseName","multiple":false,"delay":0},{"id":"number","type":"SelectorText","parentSelectors":["list"],"selector":"span.ah","multiple":false,"regex":"","delay":0},{"id":"date","type":"SelectorText","parentSelectors":["list"],"selector":"span.cprq","multiple":false,"regex":"","delay":0},{"id":"content","type":"SelectorText","parentSelectors":["list"],"selector":"p","multiple":false,"regex":"","delay":0}]}

批量下载word文书

每个文书都提供有word下载的链接,但是实现批量下载还是有一点困难。

ea05f82355dbdf97581586d06ec7e3bb.png

1、word的下载链接直接在按钮或者网页源码里面是提取不到的,是需要根据文书的url中的"docId"参数来构造的,即

http://wenshu.court.gov.cn/down/one?” + docID地址

例如:

爬取到的文书的详细页地址为:

http://wenshu.court.gov.cn/website/wenshu/181107ANFZ0BXSK4/index.html?docId=f9ffb134f0cb4a2ab832abea01298704

那么下载地址就是:

http://wenshu.court.gov.cn/down/one?docId=f9ffb134f0cb4a2ab832abea01298704

2、有了这个地址之后,原本以为可以直接用迅雷、IDM等软件来批量下载,但是很显然,网站的开发人员限制了。经过不同方法的验证,发现目前只能是通过浏览器来挨个下载。(另外,可能可以通过python设置各种反爬的方法来实现批量下载的目的,但是工程量比较大,我没试验成功,理论上应该是可的。)

那么就用了最笨的方法,借助python来模拟鼠标键盘的操作,将url批量的输入到浏览器当中,实现批量下载。

下面是单次下载的代码,批量的话只需要读取web scraper爬取的文件,构造好url,通过一个循环,依次输入下载即可。

import time
import pyautogui

time.sleep(1)
url_position = (160, 50) #url位置

def input_id(x,y,url): #输入url的动作
    pyautogui.moveTo(x, y, duration=0.2)  #0.25表示完成移动的时间          
    pyautogui.click(button='left')
    time.sleep(0.5)
    pyautogui.typewrite(url,0.01)#输入字符,0.1表示输入每个字符间隔的时间
    time.sleep(0.5)
    pyautogui.press("enter")

url1 = "http://wenshu.court.gov.cn/down/one?docId=694b012a59e34ae19967abeb00d512dc"

input_id(url_position[0],url_position[1],url1)

小结一下:

1、python固然强大,但是有时用web scraper可以效率更高,节省更多的时间。2、web scraper爬取url不变、异步加载的网页,关键是"selector type"和"click selector"的配置,可以参考永恒君之前分享的教程:这里3、python可以通过pyautogui库,来实现自动化操作任意鼠标、键盘的操作。

你可能还会想看:

1、用Python爬取28010条《隐秘的角落》评论,我发现了这些...
2、python办公 - 面对大量的扫描文件,你还在挨个手工处理吗?
3、python助你快速读懂文字内心4、用python定制网页跟踪神器,有信息更新第一时间通知你(附视频演示)5、python实现浏览器自动化操作
6、厌倦了重复操作?来看看python这个实例

欢迎交流!

微信公众号:永恒君的百宝箱个人博客:www.yhjbox.com

0299feb134735103b3a86a0bf3f4eaee.png 点个 在看 支持下永恒君吧 !
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值