phantomjs 怎么抓取js动态加载数据

phantomjs 怎么抓取js动态加载数据,第1张

phantomjs 抓取js动态加载数据的方法:

phantomjs因为是无头浏览器可以跑js,用来进行网页抓取是再好不过了。

比如我们要批量抓取网页 “历史上的今天” 的内容。

第一行将会在终端打印出字符串,第二行 phantomexit 将退出运行。

在该脚本中调用 phantomexit 是非常重要的,否则 PhantomJS 将根本不会停 止。 pyspider 连上 PhantomJS 代理后,你就能通过在 selfcrawl 添加 fetch_type='js' 的参数,开启使用 PhantomJS 抓取。

代码比较简单,直接看就可以了,需要注意的是,由于浏览器查询需要时间,在查询的过程中,应该让主线程休眠一段时间,才能保证htmlunit浏览器已经查询完毕。

import javautilconcurrentTimeUnit;

import comgargoylesoftwarehtmlunitBrowserVersion;

import comgargoylesoftwarehtmlunitWebClient;

import comgargoylesoftwarehtmlunithtmlDomNodeList;

import comgargoylesoftwarehtmlunithtmlHtmlElement;

import comgargoylesoftwarehtmlunithtmlHtmlPage;

import comgargoylesoftwarehtmlunithtmlHtmlTable;

import comgargoylesoftwarehtmlunithtmlHtmlTableBody;

public class Entrance {

public static void main (String[] args ) throws Exception

{

String webUrl = ">

这个方法只是获取页面源码;你的要求是获取DOM结构;

有一个方式,使用lxml库,先使用selenium获取整个html的DOM,再把Dom转存到lxml对象,这样的方式可以获取到正html Dom tree,下面例子:

def parse_from_unicode(unicode_str): #html DOM tree to lxml 格式

utf8_parser = lxmletreeHTMLParser(encoding='utf-8')

s = unicode_strencode('utf-8')

return lxmletreefromstring(s, parser=utf8_parser)

def parse(request):

driver = webdriverPhantomJS()

html =driverfind_element_by_name('html')

lxml_html=parse_from_unicode(html)

kk=lxml_htmlxpath('//tr') #使用xpath匹配

的确,你的问题说的好含糊,我估计你自己都不知道怎么问吧

我觉得你想要表达的是:1获得参数prodname,2你要把获得的那些js代码搬到一个外部的js文件中

如果真是这样的话,再考虑看下面的内容。

1,你先不用在外部js文件中写js代码,就在本页写好,最后再移出去。

2,我在网上找了个查找参数的方法 //获得地址栏参数

function GetQueryString(sProp)

{

var re = new RegExp("[&,]"+sProp + "=([^\\&])", "i");

var a = reexec(documentlocationsearch);

if (a == null)

return "";

return a[1];

},sProp就是你参数名。

以上就是关于phantomjs 怎么抓取js动态加载数据全部的内容,包括:phantomjs 怎么抓取js动态加载数据、如何从网页捉取JS动态数据、怎样使用scrapy爬取js动态生成的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9447737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存