2009-09-11 53 views
2

我正在用Perl寫一個爬蟲程序,它必須提取駐留在同一臺服務器上的網頁內容。我目前使用HTML::Extract模塊來完成這項工作,但是我發現模塊有點慢,所以我查看了它的源代碼,發現它沒有使用任何連接緩存來處理LWP::UserAgent如何使用Perl高效提取HTML內容?

我最後的手段是抓住HTML::Extract的源代碼,並修改它以使用緩存,但我真的想避免,如果我可以。有沒有人知道任何其他模塊可以更好地執行相同的工作?我基本上只需要抓取<body>元素中的所有文本,並刪除HTML標籤。

回答

4
+0

感謝您的回答。我想知道,你知道你提到的哪個模塊更適合重複提取大量的HTML頁面嗎? – Alvin 2009-09-11 17:25:04

+0

使用Web :: Scraper,至少可以將它傳遞給頁面的內容,而不是URL。這樣,您就可以在抓取之前執行自己的緩存。 – 2009-09-12 12:52:06

+0

@Alvin:我不知道,因爲我不知道Web :: Scraper,HTML :: TreeBuilder或任何其他模塊如何針對pQuery執行操作。所有的利弊取決於具體的要求。順便說一句,要獲得在與在pQuery中刪除的HTML標籤中的所有文本是:pQuery($ html_data) - > find('body') - > text; – draegtun 2009-09-12 21:48:29

1

HTML::Extract的功能看起來基本和無趣。如果draegfun提到的模塊不感興趣,那麼您可以自己使用LWP::UserAgentHTML::TreeBuilder來做所有的事情,而不需要太多的代碼,然後您可以自由地按照自己的條件進行緩存。

0

我一直在使用Web::Scraper爲我的刮需要。提取數據的確非常好,因爲你可以調用->scrape($html, $originating_uri),所以緩存你需要的結果也是非常容易的。

0

您是否需要實時進行此操作?效率如何影響你?你是否連續執行這項任務,以便在進入下一個頁面之前必須提取一頁?爲什麼你想避免緩存?

您的抓取工具能否下載頁面並將它們傳遞給其他內容?也許您的抓取工具甚至可以並行運行,或者以某種分佈式方式運行。

+0

謝謝,你說的對,我可以並行執行任務。使用線程模塊解決了瓶頸問題。 – Alvin 2009-09-17 18:05:54