Я пытаюсь реализовать Scrapy Spider, который читает файл CSV. Файл csv будет содержать два столбца, например:
1,google.com
2,microsoft.com
3,netflix.com
...
Теперь паук должен сохранить полный HTML код этих сайтов в указанном каталоге, а также вставить просканированный URL + путь к сохраненному HTML файлов в JSON Array file.
До сих пор я нашел следующее решение:
class RankingSpider(scrapy.Spider):
name = 'non-xss'
start_urls = []
custom_settings = {
'CLOSESPIDER_ITEMCOUNT': '50000', # Nach x Itmes Crawler beenden
'FILES_STORE': 'non-xss/html/',
'METAREFRESH_ENABLED': False
}
def __init__(self, *args, **kwargs):
super().__init__(**kwargs)
with open('/home/marcel/Desktop/crawl/top-1m.csv', 'r') as f:
reader = csv.reader(f)
n = 0
for row in reader:
if n >= 0 and n < 10000:
self.start_urls.extend(['https://www.' + row[1] + '/'])
print(row[1])
n += 1
def parse(self, response):
item = UmbrellaItem()
filename = sha1(response.url.encode()).hexdigest()
with open(self.custom_settings['FILES_STORE'] + filename, 'wb') as f:
f.write(response.body)
item['url'] = response.url
item['file_path'] = self.custom_settings['FILES_STORE'] + filename
return item
Решение делает то, что я хочу, но оно останавливается после пары секунд, а затем глохнет. Я предполагаю, что у меня возникают проблемы из-за слишком большого количества соединений. Я также пытался установить settings.py в проектах scrapy, как показано ниже:
RETRY_TIMES = 0
CONCURRENT_REQUESTS = 32
У кого-нибудь есть более стабильное решение?
Спасибо за любую помощь, которую вы можете оказать.