Web crawler 你如何用幻影蜘蛛

Web crawler 你如何用幻影蜘蛛,web-crawler,phantomjs,Web Crawler,Phantomjs,我正试图利用PhantomJS和spider构建整个域。我想从根域开始,例如www.domain.com-拉取所有链接(a.href),然后有一个que,获取每个新链接,并在que中添加新链接(如果它们没有被爬网或在que中) 有什么想法,有什么帮助吗 提前谢谢 首先,选择索引页面上的所有锚,并列出href值。您可以使用PhantomJS的文档选择器或jQuery选择器来实现这一点。然后对每个页面执行相同的操作,直到页面不再包含任何新链接。您应该拥有所有链接的主列表和每个页面的链接列表,以便能够

我正试图利用PhantomJS和spider构建整个域。我想从根域开始,例如www.domain.com-拉取所有链接(a.href),然后有一个que,获取每个新链接,并在que中添加新链接(如果它们没有被爬网或在que中)

有什么想法,有什么帮助吗


提前谢谢

首先,选择索引页面上的所有锚,并列出href值。您可以使用PhantomJS的文档选择器或jQuery选择器来实现这一点。然后对每个页面执行相同的操作,直到页面不再包含任何新链接。您应该拥有所有链接的主列表和每个页面的链接列表,以便能够确定链接是否已被处理。你可以把网络爬行想象成一棵树。树的根节点是索引页,子节点是从索引页链接的页。根据子页面包含的链接,每个子节点可以有一个或多个子节点。我希望这会有所帮助。

您可能有兴趣签出(免责声明:这是我的项目),这是一个构建在PhantomJS之上的开源抓取库。它内置了对分页的支持,并在进程中从每个页面中提取信息。你可以用这样一个简短的脚本浏览整个网站,查看每个锚链接:

pjs.addSuite({
    url: 'http://www.example.com/your_start_page.html',
    moreUrls: function() {
        // get all URLs from anchor links,
        // restricted to the current domain by default
        return _pjs.getAnchorUrls('a');
    },
    scraper: function() {
        // scrapers can use jQuery
        return $('h1').first().text();
    }
});

默认情况下,这将跳过已插入的页面,只关注当前域上的链接,尽管这两个链接都可以在您的设置中更改。

这是一个老问题,但要更新,一个令人敬畏的现代答案是(github:)

从他们的主页上引用了一个引人注目的例子:

原始幻影:

phantom.create(函数(ph){
ph.createPage(函数(第页){
第页打开('http://yahoo.com,功能(状态){
第页。评估(函数(){
瓦雷尔=
document.querySelector('input[title=“Search”]”);
el.value='github噩梦';
},函数(结果){
第页。评估(函数(){
var el=document.querySelector('.searchsubmit');
var event=document.createEvent('MouseEvent');
initEvent('click',true,false);
el.调度事件(事件);
},函数(结果){
博士退出();
});
});
});
});
});
梦魇:

新噩梦()
后藤先生('http://yahoo.com')
.type('input[title=“Search”],'github噩梦')
。单击(“.searchsubmit”)
.run();

向我们展示一些您已经实现的代码,我们可以提供帮助。顺便说一句,我不确定javascript是否会对您有所帮助。PhantomJS如何与使用Selenium呈现页面相匹配?我们能期望相同的渲染质量吗?@KimJongWoo PhantomJS使用webkit渲染引擎。我不认为它使用最新版本,因为它依赖于Qt。然而,webkit是一个渲染引擎,为Safari和Chrome等提供动力,所以它非常好。看看Selenium,它似乎只是自动化了浏览器,而不是无头浏览器。@nrabinowitz有兴趣将其作为节点模块吗?@morgs32-这取决于您的意思,这可能是可能的,也可能是不可能的。有关将PhantomJS与node集成的节点模块,请参阅。用npm打包pjscrape可能很有用,但我现在没有时间这么做。项目看起来已经死了。示例页面已断开。