如何用python爬取js动态生成内容的页面

JavaScript024

如何用python爬取js动态生成内容的页面,第1张

抓取js动态生成的内容的页面有两种基本的解决方案

1用dryscrape库动态抓取页面

js脚本是通过浏览器来执行并返回信息的,所以,抓取js执行后的页面,一个最直接的方式就是用python模拟浏览器的行为。WebKit 是一个开源的浏览器引擎,python提供了许多库可以调用这个引擎,dryscrape便是其中之一,它调用webkit引擎来处理包含js等的网页!

2 selenium web测试框架

selenium是一个web测试框架,它允许调用本地的浏览器引擎发送网页请求,所以,它同样可以实现抓取页面的要求。

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) {

}

String url = 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) {}