Mam problem ze Scrapy. Potrzebuję kodu, który zrzuci do 1000 linków wewnętrznych na dany adres URL. Mój kod działa po uruchomieniu na linii poleceń, ale pająk nie zatrzymuje się, otrzymuje tylko wiadomość.Zatrzymaj się po zeskrobaniu N przedmiotów
Mój kod wygląda następująco:
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.item import Item, Field
from scrapy.contrib.closespider import CloseSpider
class MyItem(Item):
url= Field()
class MySpider(CrawlSpider):
name = 'testspider1'
allowed_domains = ['angieslist.com']
start_urls = ['http://www.angieslist.com']
rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=True),)
def parse_url(self, response):
item = MyItem()
item['url'] = response.url
scrape_count = self.crawler.stats.get_value('item_scraped_count')
print scrape_count
limit = 10
if scrape_count == limit:
raise CloseSpider('Limit Reached')
return item
Czy jesteś pewien, że nie zatrzyma? Wierzę, że scrapy będą przetwarzać żądania już po otrzymaniu CloseSpider. Chodzi mi o to, że nie zatrzyma się natychmiast, ale żadne nowe przedmioty nie będą wymagane. – Alik
[This] (http://stackoverflow.com/questions/30928177/scrapy-limit-requests-for-testing) może być dla ciebie interesujące. –
Masz rację, przestaje. Ale planuję skalować ten proces i chciałbym usunąć wszelkie niepotrzebne przetwarzanie. Miałem nadzieję, że będzie jakiś sposób, aby "zatrzymać się na bilonie". że tak powiem. –