установка стартовых URL для скрапа вне класса - PullRequest
1 голос
/ 04 июня 2019

Я новая Scrapy, как я могу пройти start_urls снаружи класса, Я пытался сделать start_urls вне класса, но это не сработало. Я пытаюсь создать файл с именем файла из словаря (search_dict) и значением его в качестве начального URL для Scrapy

search_dict={'hello world':'https://www.google.com/search?q=hello+world',
            'my code':'https://www.google.com/search?q=stackoverflow+questions',
            'test':'https://www.google.com/search?q="test"'}

class googlescraper(scrapy.Spider):
    name = "test"
    allowed_domains = ["google.com"]
    #start_urls= ??
    found_items = []
    def parse:
        item=dict()
        #code here
        self.found_items.append(item)

for k,v in search_dict.items():
    with open(k,'w') as csvfile:
        process = CrawlerProcess({
            'DOWNLOAD_DELAY': 0,
            'LOG_LEVEL': 'DEBUG',
            'DOWNLOAD_TIMEOUT':30,})
        process.crawl(googlescraper) #scrapy spider needs start url
        spider = next(iter(process.crawlers)).spider
        process.start()
        dict_writer = csv.DictWriter(csvfile, keys)
        dict_writer.writeheader()
        dict_writer.writerows(spider.found_items)

1 Ответ

2 голосов
/ 04 июня 2019

В документации Scrapy есть пример создания сканера с аргументами: https://docs.scrapy.org/en/latest/topics/spiders.html#spider-arguments

Вы можете передать свои URL-адреса в виде:

# ...

class GoogleScraper(scrapy.Spider):
    # ...
    # Omit `start_urls` in the class definition
    # ...

process.crawl(GoogleScraper, start_urls=[
    # The URL you want to pass here
])

kwargs ввызов process.crawl() будет передан инициализатору паука.Инициализатор по умолчанию скопирует любой kwargs в качестве атрибутов класса паука.Таким образом, это эквивалентно установке start_urls в определении класса.

Соответствующий раздел в Документах Scrapy: https://docs.scrapy.org/en/latest/topics/api.html#scrapy.crawler.CrawlerProcess.crawl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...