Próbuję zbudować pająka, który mógłby skutecznie skasować informacje tekstowe z wielu stron internetowych. Ponieważ jestem użytkownikiem Pythona, zostałem skierowany do Scrapy. Jednak, aby uniknąć oszpecania ogromnych stron internetowych, chcę ograniczyć pająka do zeskrobywania nie więcej niż 20 stron o określonej "głębokości" na stronie internetowej. Oto mój pająk:Jak ograniczyć liczbę stron śledzonych w witrynie w Pythonie Scrapy
class DownloadSpider(CrawlSpider):
name = 'downloader'
download_path = '/home/MyProjects/crawler'
rules = (Rule(SgmlLinkExtractor(), callback='parse_item', follow=True),)
def __init__(self, *args, **kwargs):
super(DownloadSpider, self).__init__(*args, **kwargs)
self.urls_file_path = [kwargs.get('urls_file')]
data = open(self.urls_file_path[0], 'r').readlines()
self.allowed_domains = [urlparse(i).hostname.strip() for i in data]
self.start_urls = ['http://' + domain for domain in self.allowed_domains]
def parse_start_url(self, response):
return self.parse_item(response)
def parse_item(self, response):
self.fname = self.download_path + urlparse(response.url).hostname.strip()
open(str(self.fname)+ '.txt', 'a').write(response.url)
open(str(self.fname)+ '.txt', 'a').write('\n')
plik urls_file jest ścieżką do pliku tekstowego z adresami URL. Ustawiłem również maksymalną głębokość w pliku ustawień. Oto mój problem: jeśli ustawię wyjątek CLOSESPIDER_PAGECOUNT
, zamyka on pająki, gdy liczba zeskrobanych stron (niezależnie od witryny) osiągnie wartość wyjątku, całkowita. Muszę jednak przestać skrobać, gdy skrobię, powiedz 20 stron z każdego adresu URL. Próbowałem również zachować liczenie ze zmienną taką jak self.parsed_number + = 1, ale to też nie działało - wygląda na to, że scrapy nie są adresowane przez URL, ale je mieszają. Każda rada jest doceniana!
Nowsza odpowiedź na inne pytanie wskazuje ustawienie DEPTH_LIMIT - http://stackoverflow.com/a/18901802/263421 –
@dwightgunning yup, dziękuję za notatkę. – alecxe
to co zrobić, gdy 'self.stats [response.url]' jest większe niż 20? robot indeksujący przestanie indeksować tę witrynę? – ningyuwhut