PhantomJS を活用して、ドメイン全体をスパイダーしようとしています。www.domain.com などのルート ドメインから開始したい - すべてのリンク (a.href) をプルしてから、新しいリンクを取得するキューを作成し、クロールされていないかキューにない場合は新しいリンクをキューに追加します。 .
アイデア、助けて?
前もって感謝します!
PhantomJS を活用して、ドメイン全体をスパイダーしようとしています。www.domain.com などのルート ドメインから開始したい - すべてのリンク (a.href) をプルしてから、新しいリンクを取得するキューを作成し、クロールされていないかキューにない場合は新しいリンクをキューに追加します。 .
アイデア、助けて?
前もって感謝します!
PhantomJSの上に構築されたオープン ソースのスクレイピング ライブラリであるPjscrape (免責事項: これは私のプロジェクトです)に興味があるかもしれません。ページのスパイダー化と、進行中の各ページからの情報スクレイピングのサポートが組み込まれています。次のような短いスクリプトを使用して、サイト全体をスパイダーし、すべてのアンカー リンクを調べることができます。
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();
}
});
デフォルトでは、これは既にスパイダーされたページをスキップし、現在のドメインのリンクのみをたどりますが、これらは両方とも設定で変更できます.
これは古い質問ですが、最新の素晴らしい回答はhttp://www.nightmarejs.org/ ( github: https://github.com/segmentio/nightmare )です。
ホームページから説得力のある例を引用します。
RAW PHANTOMJS:
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open('http://yahoo.com', function (status) {
page.evaluate(function () {
var el =
document.querySelector('input[title="Search"]');
el.value = 'github nightmare';
}, function (result) {
page.evaluate(function () {
var el = document.querySelector('.searchsubmit');
var event = document.createEvent('MouseEvent');
event.initEvent('click', true, false);
el.dispatchEvent(event);
}, function (result) {
ph.exit();
});
});
});
});
});
ナイトメア:
new Nightmare()
.goto('http://yahoo.com')
.type('input[title="Search"]', 'github nightmare')
.click('.searchsubmit')
.run();
まず、インデックス ページのすべてのアンカーを選択し、href 値のリストを作成します。これは、PhantomJS のドキュメント セレクターまたは jQuery セレクターを使用して行うことができます。次に、ページに新しいリンクが含まれなくなるまで、各ページに対して同じことを行います。リンクがすでに処理されているかどうかを判断できるように、すべてのリンクのマスター リストと各ページのリンクのリストが必要です。Web クローリングは木のようなものと考えることができます。ツリーのルート ノードはインデックス ページであり、子ノードはインデックス ページからリンクされたページです。各子ノードは、子ページに含まれるリンクに応じて、1 つ以上の子を持つことができます。これが役立つことを願っています。