Проверьте, есть ли в файле URL-адрес, прежде чем использовать Scrapy - PullRequest
0 голосов
/ 10 октября 2019

Я очищаю большой файл, содержащий список URL. Очевидно, я не могу очистить все URL-адреса подряд. Мое текущее решение читает URL из файла. Как только он сканирует и загружает документы с этой страницы, я записываю в новый файл, который выглядит примерно так:

https://url_i_completed_crawling     E:/location_I_stored_crawled_files
https://another_url_i_completed_crawling     E:/another_location_I_stored_crawled_files

Моя проблема заключается в том, что когда я останавливаю паука и пытаюсь продолжить с того места, на котором остановился,Программа запускается из исходного текстового файла URL-адресов и начинает перечитывать и перезаписывать предыдущие загрузки с тем же содержимым.

Я попытался поместить код в паук, который проверяет, передается ли URL-адрес в функцию анализа вФайл "complete_urls.txt" ... но, очевидно, это длинная проверка, так как число завершенных URL-адресов растет.

Итак, мой вопрос таков: как я могу вспомнить, какой URL был последним URL для сканирования, и чтобы мой паук начинал со следующего URL в текстовом файле при перезапуске программы.

    # file containing urls to crawl is passed in from command line
    # > scrapy crawl fbo-crawler -a filename=FBOSpider/urls_file.txt   
    def __init__(self, filename=None):
        if filename:
            with open(filename, 'r') as r:
                # here I want to check if r.readlines() is passing a URL that I have aleady crawled
                # crawld URLs are stored in a text file as shown above
                self.start_urls = r.readlines()

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Согласно документам Scrapy:
Scrapy поддерживает приостановку и возобновление сканирования функциональность из коробки.

0 голосов
/ 11 октября 2019

SCRAPY AND DELTAFETCH

Это промежуточное программное обеспечение Scrapy Spider, которое игнорирует запросы к страницам, содержащим элементы, просмотренные в предыдущих обходах того же паука, и, таким образом, создает «дельта-обход», содержащий только новые элементы.

Сначала установите DeltaFetch с помощью pip:

pip install scrapy-deltafetch

Затем вам нужно включить его в файле settings.py вашего проекта:

SPIDER_MIDDLEWARES = {
'scrapy_deltafetch.DeltaFetch': 100,
}
DELTAFETCH_ENABLED = True

Сброс DeltaFetchЕсли вы хотите повторно очистить страницы, вы можете сбросить кэш DeltaFetch, передав аргументу deltafetch_reset вашему пауку:

scrapy crawl test -a deltafetch_reset=1

Вы можете проверить страницу проекта на github для дальнейшего просмотра. информация:

0 голосов
/ 10 октября 2019

Это может быть хорошей идеей для хранения таких табличных схем в таблицах. реляционные базы данных рекомендуются для таких целей. из-за индексации доступ к данным быстрее. Тем не менее, в вашем случае может оказаться полезным удаление очищенных URL-адресов из исходного файла.

...