
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动态生成的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)