用Phantomjs抓取网页链接

赵小龙 发布于 2013/08/01 14:01
阅读 2K+
收藏 1

@bobshi 你好,想跟你请教个问题:

我现在要抓取一个网页a标签name属性为dttl的所有href的数据,我是以下面这两种方式做的,

var list = document.getElementsByName('dttl');
var list = document.querySelectorAll('a[name="dttl"]');

这两种方式得到的数据大小没问题,但里面只有第一个对象是有数据的,其它对象都是null,所以请教一下,是不是这样来获取数据,谢谢!

加载中
0
Devqin
Devqin
这样写的话,倒是没错,得到的是一个节点a的数组,像你说的只有第一个有数据,结合页面上的节点你再调试一下,在浏览器的dev tool里写的js代码在phantomjs里几乎是可以直接使用的,你可以把抓取的内容打印出来,再慢慢的调试。另外,你可以引入第三方的类库,比如jquery,操作dom会更方便些吧
赵小龙
赵小龙
我也觉得没错,这段代码是我在html里测试过的,浏览器刷新也可以遍历出数组的数据,但拿到phantomjs里却不是这样,很疑惑!
0
bobshi
bobshi
嗯,我亲自试验了一下。确实有这个问题。如果只执行 var list = document.querySelectorAll('a[name="dttl"]');这一句(前面一句注释掉)也是没有问题的。具体原因还不太清楚,这也许是phantomjs的bug,又或许是其集成的内部webkit内核的问题。由于querySelectorAll是w3c定义比较新的高级查询接口(可谷歌该关键字了解),建议在这种地方少用它。有比较复杂dom查询建议像楼上所说在页面注入jquery等类库。或者使casperjs,这是一下对phantomjs的封装的东西。
bobshi
bobshi
@赵小龙 ……
赵小龙
赵小龙
回复 @bobshi : 实际上值是已经获取到了,只是显示不出来,加了这个方法之后就可以显示出来了!
bobshi
bobshi
回复 @赵小龙 : 加入这个方法只是能输出值吗?那程序中能正常获取到这个值吗
赵小龙
赵小龙
一个朋友帮我解决了这个问题,加了onConsoleMessage这个方法就好了!
返回顶部
顶部