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

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

爬数据需要到的jar

jsoup
commons系列
poi 导出表格

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

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

在这里插入图片描述
清空的意义只是在于方便看到下面所需要的链接相关数据,然后点击查一下。
在这里插入图片描述
这个就是所需要的搜索的接口。
当然 如果你还需要官网之类的信息的话 就还需要调另外的接口。我这就不截图了。直接将链接发出
https://www.qichacha.com/xxxxxxxxxxxxxxxxxxxxxxx.html
这个就是某个公司的详情页面 ,需要其他参数请自行在里面查找

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

我直接上代码。因为一开始写我没用jsoup 所以 就没有替换一开始的解析了。你们可以自行替换
在这里插入图片描述
Cookie 请将浏览器你看到的那个请求的Cookie 进行替换在这里插入图片描述
自行复制下来进行替换就好。
自此得到的 stringBuffer 就是整个搜索的html的页面
在这里插入图片描述
在这里插入图片描述
这样就能拿到了基本相关信息 因为后来才用到jsoup 去获取里面更多的字段值。所以这部分也就没做修改了。
因为我这边还需要用到官网的字段。所以我这边getWebsite 方法 就是获取官网字段的方法。就不讲解了,因为都是一样的直接贴图
在这里插入图片描述
这个所返回的就是官网的地址 。具体要看的话 请用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的结果。我这边直接切割了下 。所以才会如上展示
在这里插入图片描述
csessionid 与value 会在点击确认的时候 有用到。所以要记录下来

那么就到了最后一个接口。。
https://www.qichacha.com/index_verifyAction 这个是post 的接口
在这里插入图片描述
curl 是第一步初始化的值
如果正确的话会返回这个
{“msg”:"\u9a8c\u8bc1\u6210\u529f",“success”:true}
错误的话
{“msg”:“滑动验证失败”,“success”:false}

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

最后再重新调用下页面的接口。就能获取到数据页面拉。
在这里插入图片描述

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

最后的最后。给大家个忠告哈。。调用的时候请给个休眠时间。。不然最后就会这样。。
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq793318828/article/details/93485225