使用Java和HttpClient在天眼查网站批量查询公司信息

简介

由于工作原因,需要在天眼查网站上查询大约九百个公司的工商信息。数量有点多,所以手动查询是不可能的了,因此写了个程序进行自动查询并且把获取到的信息导入到Excel表格中。

第一次写这样的程序,还是存在很多不足的地方。下面列一下本程序实现的功能以及存在的问题。

功能

  • 自动读取comyang.txt文件中的公司名进行搜索
  • 把搜索到含有公司详细信息的html保存在info文件夹
  • 把html文件中的信息提取到excel表格中
  • 判断是否出现机器人验证
  • 断点续查(关了再打开不会重复查询)

缺点

  • 无法跳过机器人验证
  • 程序分为两个执行文件,不是一键完成
  • 偶尔会卡住(请求没有响应)

问题记录

在写这个的时候,还是遇到挺多坑的,在此记录一下。

  • 登录问题:一开始没有登录,查询的时候总是被拦截跳转到登录页面。在浏览器上登录,复制cookie信息,在代码中设置即可。
  • 机器人验证:据我观察,同一个IP调用天眼查网站上的接口大约100次就会出现一次机器人验证。虽然很想自动完成,但是能力有限,实现不了,后来想想采取了一个折中的方法,在代码里面检测是否出现机器人验证。当出现机器人验证的时候,打印验证的地址,程序暂停。等待人工完成验证后,输入OK再继续往下执行。
  • 程序卡住:不知道是代码问题还是,网站的问题。每查询一百多个公司的时候,总会有个请求等不到响应,一直在等待。虽然做了处理,把程序关了再打开还是会继续往后查询,但是挺纠结。以后再处理。
  • 图片编码:试着破解机器人验证的过程发先一个挺有意思的地方。天眼查网站的机器人验证是点选汉字的方式,页面中有两张图片。这两张图片有个比较有意思的地方是采用Base64编码的方式进行传输的。也就是把汉字转为字符串的形式,以前不知道还有这种操作。

依赖jar包

  • httpclient:模拟发起HTTP请求
  • jsoup:解析HTML
  • poi-ooxml:Excel表格操作

关键代码

  • 设置请求头:非常关键,需要把登录后的cookie信息复制在这里设置,不然调用接口的时候会被拦截跳转到登录页面。
    /**
     * 设置请求头
     * @param httpGet
     */
    public static void setHttpHeaders(HttpGet httpGet) {
        //设置默认请求头 在浏览器登陆后,把cookie的内容复制到这里设置cookie,不然无法查询
        httpGet.setHeader("Cookie","");
        httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
        httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.9");
        httpGet.setHeader("Connection", "keep-alive");
        httpGet.setHeader("Host", "www.tianyancha.com");
        httpGet.setHeader("Referer", "https://www.tianyancha.com/");
        httpGet.setHeader("Upgrade-Insecure-Requests", "1");
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36");
    }
  • 模拟HTTP请求
HttpClient httpClient = HttpClientBuilder.create().build();
HttpClientContext context = HttpClientContext.create();
//执行HTTP请求
HttpResponse response = httpClient.execute(httpGet, context);

运行结果

  • TianYanChaCrawler:运行结果保存在info文件夹中
    这里写图片描述

这里写图片描述

  • GetExcel
    这里写图片描述

这里写图片描述

源码地址

GitHub 链接

猜你喜欢

转载自blog.csdn.net/yanfeng9507/article/details/81192262