[英]Stop Scrapy crawling the same URLs
我已經編寫了一個基本的Scrapy蜘蛛來抓取一個似乎運行良好的網站,除了它不想停止的事實,即它不斷重訪相同的網址並返回相同的內容 - 我總是最終不得不停止它。 我懷疑它一遍又一遍地在同一個網址上。 是否有規則可以阻止這種情況? 或者我還有什么需要做的嗎? 也許是中間件?
蜘蛛如下:
class LsbuSpider(CrawlSpider):
name = "lsbu6"
allowed_domains = ["lsbu.ac.uk"]
start_urls = [
"http://www.lsbu.ac.uk"
]
rules = [
Rule(SgmlLinkExtractor(allow=['lsbu.ac.uk/business-and-partners/.+']), callback='parse_item', follow=True),
]
def parse_item(self, response):
join = Join()
sel = Selector(response)
bits = sel.xpath('//*')
scraped_bits = []
for bit in bits:
scraped_bit = LsbuItem()
scraped_bit['title'] = scraped_bit.xpath('//title/text()').extract()
scraped_bit['desc'] = join(bit.xpath('//*[@id="main_content_main_column"]//text()').extract()).strip()
scraped_bits.append(scraped_bit)
return scraped_bits
我的settings.py
文件看起來像這樣
BOT_NAME = 'lsbu6'
DUPEFILTER_CLASS = 'scrapy.dupefilter.RFPDupeFilter'
DUPEFILTER_DEBUG = True
SPIDER_MODULES = ['lsbu.spiders']
NEWSPIDER_MODULE = 'lsbu.spiders'
任何關於停止連續運行的幫助/指導/指導都將不勝感激......
因為我是這個的新手; 任何關於整理代碼的評論也會有所幫助(或指向良好指令的鏈接)。
謝謝...
DupeFilter默認啟用: http ://doc.scrapy.org/en/latest/topics/settings.html#dupefilter-class,它基於請求網址。
我在一個新的vanilla scrapy項目中嘗試了一個簡化版本的蜘蛛,沒有任何自定義配置。 dupefilter工作,並在幾次請求后停止了爬行。 我說你的設置或scrapy版本有問題。 我建議你升級到scrapy 1.0,只是為了確定:)
$ pip install scrapy --pre
我測試的簡化蜘蛛:
from scrapy.spiders import CrawlSpider
from scrapy.linkextractors import LinkExtractor
from scrapy import Item, Field
from scrapy.spiders import Rule
class LsbuItem(Item):
title = Field()
url = Field()
class LsbuSpider(CrawlSpider):
name = "lsbu6"
allowed_domains = ["lsbu.ac.uk"]
start_urls = [
"http://www.lsbu.ac.uk"
]
rules = [
Rule(LinkExtractor(allow=['lsbu.ac.uk/business-and-partners/.+']), callback='parse_item', follow=True),
]
def parse_item(self, response):
scraped_bit = LsbuItem()
scraped_bit['url'] = response.url
yield scraped_bit
您的設計使抓取進入圈內。 例如,有一個頁面http://www.lsbu.ac.uk/business-and-partners/business ,打開時包含指向“ http://www.lsbu.ac.uk/business-and ”的鏈接- 合作伙伴/合作伙伴 ,然后再包含第一個鏈接。因此,您無限期地進入圈子。
為了克服這個問題,您需要創建更好的規則,從而消除循環引用。 而且,您定義了兩個相同的規則,這是不需要的。 如果您想要follow
您可以始終將其放在同一規則上,您不需要新規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.