Сканирование URL с Scrapy, которые хранятся в CSV - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь реализовать 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

У кого-нибудь есть более стабильное решение?

Спасибо за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 28 марта 2020

Один способ - с помощью Scrapy.

Scrapy может отправить запрос http. Вот документация для этого: https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy .http.Request

Другой способ - использовать библиотеку запросов в Python. Документы для этого можно найти здесь: https://requests.readthedocs.io/en/master/.

...