我正在寫一個Scrapy刮板,它使用CrawlSpider抓取網站,瀏覽它們的內部鏈接,並且抓取任何外部鏈接的內容(與原始域不同的鏈接)。基於Scrapy CrawlSpider的start_urls的動態規則?
我設法做到這一點與2條規則,但他們是基於被抓取的網站的域名。如果我想在多個網站上運行此操作,我遇到了一個問題,因爲我不知道當前處於哪個「start_url」,因此我無法適當地更改規則。
這就是我想出了這麼遠,它適用於一個網站,我不知道如何將它應用到的網站列表:
class HomepagesSpider(CrawlSpider):
name = 'homepages'
homepage = 'http://www.somesite.com'
start_urls = [homepage]
# strip http and www
domain = homepage.replace('http://', '').replace('https://', '').replace('www.', '')
domain = domain[:-1] if domain[-1] == '/' else domain
rules = (
Rule(LinkExtractor(allow_domains=(domain), deny_domains=()), callback='parse_internal', follow=True),
Rule(LinkExtractor(allow_domains=(), deny_domains=(domain)), callback='parse_external', follow=False),
)
def parse_internal(self, response):
# log internal page...
def parse_external(self, response):
# parse external page...
這或許可以剛好路過完成當調用scraper時,start_url作爲參數,但我正在尋找一種在scraper本身內以編程方式執行該操作的方法。
任何想法? 謝謝!
Simon。
不,外部鏈接的內容被刮掉。內部鏈接不會被抓取,只能被抓取才能找到網站上的所有外部鏈接。 – Simon
@Simon那麼你需要在'parse_internal'中調試你的選擇器..它們可能不正確 – Umair
它們不正確?我想你可能錯過了這個問題中的一段。我在代碼編寫工作的問題中寫道,我只是想找一種方法將它應用於多個start_urls。 – Simon