2014-07-14 68 views
2

我需要一個建議,以最有效的方式列出網站中的所有鏈接。我能夠做到這一點與任何PHP VB和我試圖用Scrapy做到這一點,但我的問題是,與第一個2是不夠的輸入網站的地址,我實際上不得不刮我的下面的鏈接代碼,並與scrapy我試圖列出頁面中的所有後續鏈接,但蜘蛛似乎永遠不會結束研究。列出給定網站中的所有鏈接

在otehr詞我需要找到一種方法來輸入網站地址返回該網站上的所有鏈接。我需要爲一個學校項目做到這一點,並且我正在考慮對零售業進行一次小型研究,因此我需要列出給定網站的最多20000個結果。

有什麼建議嗎?

回答

1

Scrapy是一個完美的選擇。使用CrawlSpiderLinkExtractor

下面的蜘蛛會follow並收集網站上的所有鏈接。由於默認情況下啓用了OffsiteMiddleware,因此您無法從其他域獲取鏈接。

from scrapy.item import Field, Item 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors import LinkExtractor 


class SampleItem(Item): 
    link = Field() 


class SampleSpider(CrawlSpider): 
    name = "sample_spider" 
    allowed_domains = ["domain.com"] 
    start_urls = ["http://domain.com"] 

    rules = (
     Rule(LinkExtractor(), callback='parse_page', follow=True), 
    ) 

    def parse_page(self, response): 
     item = SampleItem() 
     item['link'] = response.url 
     return item 

如果要限制鏈接的數量和獲得N條鏈路後停止蜘蛛,使用Close Spider擴展和設置CLOSESPIDER_ITEMCOUNT設置:

CLOSESPIDER_ITEMCOUNT

的整數,指定號碼項目。如果物品和物品通過物品 管道後,蜘蛛的 比該金額多,則蜘蛛將被關閉,其原因爲 closespider_itemcount。如果爲零(或未設置),蜘蛛將不會按傳遞項目的數量關閉 。

在你的情況下,你也可以使用CLOSESPIDER_PAGECOUNT設置。

希望有所幫助。

+0

非常感謝提示! 2其他問題: 如果我需要列出只包含特定字符串的頁面,可能嗎?所以我只能列出產品頁面而不是主頁面。 一次可以在多個網站上執行它嗎? –

+0

@markoc。是的,這是可能的。考慮問一個單獨的問題,以便更多的人有機會幫助你。在這裏也給我一個鏈接。如果以下主題得到解決,請不要忘記接受答案。謝謝。 – alecxe

+0

非常感謝您的幫助。我會發布新的問題。此刻我嘗試了您發佈的scrapy蜘蛛,但我收到一條錯誤消息「無法導出LinkExtractor」。任何想法??我是一個真正的初學者與scrapy,但它似乎資源豐富!再次感謝 - 這裏是我的新問題的鏈接:https://stackoverflow.com/questions/24788376/scrapy-error-cannot-import-name-link-extractor –

相關問題