java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码

这两天需要用到某查查的数据。发现只能看到100页多余部分需要开启会员。导出表格也需要开vip .虽然在某宝上十几块就可以。但是我决定还是自己写个爬虫代码 将数据导出到 xls 表格
本来想用python 写的,但是不知道为什么WebDriver 的插件下不下来。所以最终还是选用了java 进行爬数据。

爬数据需要到的jar

jsoup
commons系列
poi 导出表格

准备好了就开始进入正题 手把手教学

我是用的是360的浏览器。其他浏览器的开发者工具不一定是F12 ,请自行使用你们自己的浏览器快捷键 。下面的步骤都建立在登录后的前提下。各位记得登录自己的账号
首先第一步
1 .打开某查查的官网,然后随便输入搜索的内容 然后按F12 先清空所有的请求链接 然后点击

java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第1张图片
清空的意义只是在于方便看到下面所需要的链接相关数据,然后点击查一下。
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第2张图片
这个就是所需要的搜索的接口。
当然 如果你还需要官网之类的信息的话 就还需要调另外的接口。我这就不截图了。直接将链接发出
https://www.qichacha.com/xxxxxxxxxxxxxxxxxxxxxxx.html
这个就是某个公司的详情页面 ,需要其他参数请自行在里面查找

知道这两个接口后。那么我们就开始进行爬数据了

我直接上代码。因为一开始写我没用jsoup 所以 就没有替换一开始的解析了。你们可以自行替换
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第3张图片
Cookie 请将浏览器你看到的那个请求的Cookie 进行替换java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第4张图片
自行复制下来进行替换就好。
自此得到的 stringBuffer 就是整个搜索的html的页面
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第5张图片
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第6张图片
这样就能拿到了基本相关信息 因为后来才用到jsoup 去获取里面更多的字段值。所以这部分也就没做修改了。
因为我这边还需要用到官网的字段。所以我这边getWebsite 方法 就是获取官网字段的方法。就不讲解了,因为都是一样的直接贴图
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第7张图片
这个所返回的就是官网的地址 。具体要看的话 请用postMain 或者直接网页F12查看接口 ,因为接口返回的是整个html 的内容

这样子的话 就基本完成了。。我这边测试了下 发现刚开始是好的,但是突然就报错了。原因是我切割字符串没做判断导致的,这是为什么呢,。是因为请求多了。然后某查查那边认为是非法请求操作。然后有了个滑动验证的页面出现,所以我解析的时候就会报错。。
这个时候我F12查看的时候 因为会跳转新页面然后控制器的请求会被全部清空。所以我就用fiddler 进行抓包 查看了 连接请求的数据 。正好被我发现了。验证过程一共会有三个请求连接出现
第一个 https://cf.aliyun.com/nocaptcha/initialize.jsonp?a=QNYX&t=QNYX%3A"+curl+"%3A0.4401802408723421&&scene=register&lang=cn&v=v1.2.17&href=https%3A%2F%2Fwww.qichacha.com%2Findex_verify&callback=initializeJsonp_" +getNumber(0)

curl ==== 时间戳 getNumber 就是返回个18位数的字符串。这个我也不知道是为什么。因为我请求多次发现这个会变。所以我就随机了18位数。测试过后其实几位数的都ok 。为了正常 我就跟原来的一致
这个请求完毕后会返回个json

initializeJsonp_789786927615608146({“success”:true,“result”:{“msg”:“success”,“success”:true}});
initializeJsonp_789786927615608146 _后面的18位数就是之前自己传的。这个没啥用。可以不用管

然后滑动到最右边的时候又会调用一个接口

https://cf.aliyun.com/nocaptcha/analyze.jsonp?a=QNYX&t=QNYX%3A"+curl+"%3A0.4401802408723421&n=118%23ZVWZz%2FbUvTKbUewjOZ2CReZTZe7hngwuZH2kes6TzfQZZZZZc5i2YwbYtif4fHCVZZVCZOiTzeWzZgCuc6qYI99wtZChXHRYze2ZZwqhzTxizZZZXTNVzegVC411VHC%2FZZ2uZYqhzHRZZgCZXoqYZH2zZZChXHhbZZ2uZY6DzqquezbDcoTtGWex7gsDc5d3ngDQYKiGZ6W21oFZg72gsmbLOEjknPgZWicF%2FFCrNUXWSuYyRZQZuYPAPQqZZyj6zZG0pVRZXGtCQmNbHNyRbBzRDFeU9CT30YvYuPcKz3Be7DpKD9ZnLXqFwUdd1ro1Y%2Be5BlqZ1FYpqlj73ht5tS7YpZw2CfaliUhez430u5X4AIyNSPIp9mtXCOgoyXrjcct0CKYWt87QXamRaPxQc18ngVB9eSfdYe1r064HQ2r8XPqv3NILcApmAZWv20QmNOerOcTZcZbxpzVjf9K58Pq4EguewDQMjNI1MlGUBsew3djqxuk1rSIOwKhvvSx6lKeZubdWshTxRhVITgylO9gAbA0Y1JbqujnOGGsQMu4Wjvw%2BKKRQfzk0e%2BI9UgIEK32Mu5x9Mv37yDFLHJS0DObbHHZ8uM7zt2zhd%2Fci2gynTzpzyoQEk%2B8zmE3BAkSAor4OC0Nv%2FWOcV0BiyCcn%2FcVKzZuy0gZtv9V1R3BfZgUIxiCbBxb1xg3xSanb6OaFsN2J31Uzipok37GHGHtHrwx9RNrUF9KQc4i3F8bQTEi97plYOVSjiyNOJr0ebCeNOi%2B7kAdHhIXNlUW%2BRo5H6zsjWp8YF5VYVZwOR1fWsiVaPK0s1EM9xYWMdU%2B%2BLhMdUh1UJuDdvQendBZHUtP%2BGRmF5rsMtpHZt1aidNwi%2FZKyddDY1DPPXRNX2lUeQGFDUExJQIu9P5APOI1atit363y5HN0mfl5zKDq%2BE4jXKQUYYULXEuLR2MrIoTdO1qQKdF%2B90MpJqcl6S%2BGmBfF2q12JPX3zbqB4ZZ0IuAhWdWmGBiSA7of0Y0rZT%2Fg2ng%3D%3D&p={“ncSessionID”%3A"5f37688616c3"}&scene=register&asyn=0&lang=cn&v=966&callback=jsonp_" +getNumber(0)

这个curl 就是上个接口初始化的时间戳
getNumber 又是一个新的18位数 。 当然有问可能会说 为什么要传个0过去。。其实这个没啥用。。这个传的只是为了让返回多少位数的字符串。传0会默认18位数的字符串返回

{“success”:true,“result”:{“csessionid”:“01daFf1l9scRU8mRh8M3qJ5_FwsaheIR8Q_QH6pQBeZ1N8ijeHKzmVsBb5h0VNGKUw0guSwCyL-M6JiICtRAJzB0Hzrwy86Xy1xTAvWk_gKd7GvFkZZxe1-O_QT5YJlJFDDQkUdMsptYK_WofEg-msTY3qimr-_g_w-m3mW4nE4pY”,“code”:0,“value”:“05JkRFK6UtwzBZKy3RJfMYNFVZ8MZ3kWefo5Gktd8KxQlNrfF-81bdYmU1cAk0dY6TGjvtpenyARFtQx-bNBp__hk4nGp21K_eENWcsXfJQzBptPb3S5U-qVTGvcE_kUa1f8OK_vIrbixjKx0P2veOw5kYBtxP2svA7zDwMJSgX4-somcC00Xc3bB7XRNv01vAHIBeHhO1pidp4fKNSy0UKwFQxt0IHB424h9I6iv2o3r_CqnIAey3-pOXLwmv704gyes0JUFkmLXxX_bmfQBAeoj0mbvqverSoaLz0Q4YNPa5saSAt98ybKjlhRDRjHufXU34HwOgY2Ys4U1Cq16s1J9k771ducTnB4OC3ZYsaPUU28iFkGIdhIjyXooyj0j7”}}

重点来了 。这个返回的数据就是有用的了。这个接口默认返回的是jsonp的结果。我这边直接切割了下 。所以才会如上展示
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第8张图片
csessionid 与value 会在点击确认的时候 有用到。所以要记录下来

那么就到了最后一个接口。。
https://www.qichacha.com/index_verifyAction 这个是post 的接口
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第9张图片
curl 是第一步初始化的值
如果正确的话会返回这个
{“msg”:"\u9a8c\u8bc1\u6210\u529f",“success”:true}
错误的话
{“msg”:“滑动验证失败”,“success”:false}

错误请检查cookie .一般会是cookie的问题

最后再重新调用下页面的接口。就能获取到数据页面拉。
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第10张图片

这个就是最后我用poi 最后导出的数据,。 需要的话 请留言 我发地址。或者稍后我直接加个git 链接。

最后的最后。给大家个忠告哈。。调用的时候请给个休眠时间。。不然最后就会这样。。
java 解决企查查非法操作验证问题 爬取企查查企业相关数据 最新实践可用 java 代码_第11张图片

仅供学习参考。如有侵权 请联系本人删除

你可能感兴趣的:(爬虫)