怎么爬取网页的动态内容,很多都是js动态生

JavaScript074

怎么爬取网页的动态内容,很多都是js动态生,第1张

抓取动态页面有两种常用的方法,一是通过JavaScript逆向工程获取动态数据接口(真实的访问路径),另一种是利用selenium库模拟真实浏览器,获取JavaScript渲染后的内容。但selenium库用起来比较繁琐,抓取速度相对较慢,所以第一种方法日常使用较多。

我用Jsoup写爬虫,一般遇到html返回没有的内容。但是浏览器显示有的内容。都是分析页面的http请求日志。分析页面JS代码来解决。

1、有些页面元素被隐藏起来了->换selector解决

2、有些数据保存在js/json对象中->截取对应的串,分析解决

3、通过api接口调用->伪造请求获得数据

还有一个终极方法

4、使用phantomjs或者casperjs这种headless浏览器

String url = "http://xinjinqiao.tprtc.com/admin/main/flrpro.do"

try {

    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10)

    //设置webClient的相关参数

    webClient.getOptions().setJavaScriptEnabled(true)

    webClient.getOptions().setCssEnabled(false)

    webClient.setAjaxController(new NicelyResynchronizingAjaxController())

    //webClient.getOptions().setTimeout(50000)

    webClient.getOptions().setThrowExceptionOnScriptError(false)

    //模拟浏览器打开一个目标网址

    HtmlPage rootPage = webClient.getPage(url)

    System.out.println("为了获取js执行的数据 线程开始沉睡等待")

    Thread.sleep(3000)//主要是这个线程的等待 因为js加载也是需要时间的

    System.out.println("线程结束沉睡")

    String html = rootPage.asText()

    System.out.println(html)

} catch (Exception e) {

}