htmlunit抓取动态网页(链接跳转后会进入企业信息公示页面,需要的内容 )

优采云 发布时间: 2021-12-19 11:08

  htmlunit抓取动态网页(链接跳转后会进入企业信息公示页面,需要的内容

)

  最近在做一个项目,扫描营业执照二维码得到一个网址链接。链接重定向后,将进入企业信息公示页面。您需要通过此链接获取所需信息(公司名称、法人、信用代码等)。

  我在网上查了很多,找到了很多方法,但是都爬不出来。一般报521错误,没有跨域,网页使用JS动态加载,我们只获取静态信息等等。所以并不是所有的方法都可行。

  最后的解决方案是:WebClient模拟浏览器客户端,设置JS动态加载on(必须的,主要针对那些JS,Ajax动态加载的数据),然后使用HtmlPage类来接受网页。使用Jsoup清理数据,得到我们需要的内容。值得一提的是

  Jsoup 的用法和 JS 非常相似。doc.getElementById("id") 和 doc.getElementsByTag(tagName) 一般可以通过这两种方法获取。我们在谷歌浏览器中使用F12打开开发调试工具。使用定位功能定位我们需要的数据的位置,并查看标签的id。这个id就是我们在使用Jsoup函数时使用的ID。这样就可以得到具体的数值。具体Jsoup用户可以百度搜索。

  下面废话不多说,直接上代码:

  (1)环境

  1)Jsoup 环境

                  

org.jsoup

jsoup

1.10.2

  2)WebClient 环境

  这个比较麻烦

  我在自己的项目中直接贴了Jar的截图(有需要的可以联系我)

  

  

  (2)源码(这是获取企业信息的源码,其他类似,webclient模拟一样,只是清洗不同)

  public static List analysisQyInfoForOld(String url){

final WebClient client = new WebClient();

client.getOptions().setJavaScriptEnabled(true);// 默认执行js

client.getOptions().setCssEnabled(false);

client.setAjaxController(new NicelyResynchronizingAjaxController());

client.getOptions().setThrowExceptionOnScriptError(false);

HtmlPage page = null;

try {

page = client.getPage(url);

} catch (FailingHttpStatusCodeException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

String pageXml = page.asXml(); //以xml的形式获取响应文本

List lists = new ArrayList();

/**jsoup解析文档*/

Document doc = Jsoup.parse(pageXml);

Element element1 = doc.getElementById("REG_NO"); //统一社会信用代码/注册号

Element element2 = doc.getElementById("CORP_NAME");//名称

Element element3 = doc.getElementById("ZJ_ECON_KIND");//类型

Element element4 = doc.getElementById("OPER_MAN_NAME");//经营者

Element element5 = doc.getElementById("FARE_PLACE");//经营场所

Element element7 = doc.getElementById("ADDR"); //住址

Element element6 = doc.getElementById("BELONG_ORG");//所属部门

lists.add(element1.text());

lists.add(element2.text());

lists.add(element3.text());

lists.add(element4.text());

if(element5 == null ) {

lists.add(element7.text());

}else {

lists.add(element5.text());

}

lists.add(element6.text());

return lists;

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线