云南省政府采购网
因工作需要,近期写了一个云南省政府采购网相关的爬虫,用以爬取网站发布的招标采购信息。
云南省政府采购网设计了很多的反爬策略,在处理过程中发现了一些很有意思的地方,简单记录一下。
项目最终使用DrissionPage和httpx库完成浏览器驱动和POST请求发送。
图形验证码
云南省政府采购网,图形验证码是精心挑选过的,屏蔽爬虫很有一套。
以上面图片为列,文字颜色与背景颜色相差不大,甚至部分图片,用肉眼都很难分辨。
通过常用的OCR工具,根本无法准确识别。可有效拦截大型互联网爬虫。
最终是通过DrissionPage驱动浏览器,手动点击解决的。
加密接口
参考URL: 云南政府采购网滑块逆向分析
参考以上分析,API接口是根据图形验证码点击结果生成的。(属实是有点夸张)
API接口是临时生成的,且有效期极短。页面保持10分钟,就需要重新验证,生成新的接口。
有效的杜绝了常见的简单的爬虫程序。
由于使用DrissionPage驱动浏览器,此处也就使用浏览器自动计算接口了。
在发起第一次请求后,将请求接口保存,后续使用轻量级爬虫requests、httpx快速爬取。
Post请求headers
Post请求发送多次都不成功,后续将请求headers和payload按照抓包的headers和payload一模一样设置,才通过。
其中由于需要注意
这里可以使用requests/httpx库生成http POST请求来获取响应数据。
Post请求payload
Post请求在使用了两三次之后,就出现406、500处理错误。
Post请求头
而500状态码测试由于payload不规范,需要注意payload里面也有参数配置,需要与url参数一致,服务器出现无法处理的情况。
按照抓包的payload修改,再次访问就正常了。
最后
为了保证下一次访问可以正常发起,需要前设置好headers基本参数,需要及时更新cookies中的route等参数。
最后使用json文件保存更新请求包参数,在每一次请求后把最新的参数保存在json文件内,并在下一次启动时更新。
云南省政府采购网是我见过的反爬措施做的比较全面的网站,很符合我对政府网站的刻板印象。