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

优采云 发布时间: 2022-03-09 01:06

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

)

  我最近在做一个项目,通过扫描营业执照的二维码得到一个URL链接。一个链接跳转后会进入企业信息公示页面,您需要通过该链接获取所需信息(公司名称、法人、信用代码等)。

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

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

  Jsoup 的用法与 JS 非常相似。doc.getElementById("id") 和 doc.getElementsByTag(tagName) 一般可以使用这两种方法获取。我们使用F12在谷歌浏览器中打开开发调试工具。使用定位功能定位我们需要的数据的位置,查看标签的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人工客服


线