Python Scrapy: возврат списка очищенных URL - PullRequest
0 голосов
/ 29 апреля 2020

Я использую scrapy, чтобы очистить все ссылки от одного домена. Я просматриваю все ссылки в домене, но сохраняю все ссылки вне домена. Следующий скребок работает правильно, но я не могу получить доступ к переменным-членам из скребка, так как я запускаю его с CrawlerProcess.

import scrapy
from scrapy.crawler import CrawlerProcess

class MySpider(scrapy.Spider):
    name = 'myspider'
    start_urls = ['https://example.com']

    on_domain_urls = set()
    off_domain_urls = set()

    def parse(self, response):
        links = response.xpath('//a/@href')
        for link in links:
            url = link.get()
            if 'example.com' in url and url not in self.on_domain_urls:
                print('On domain links found: {}'.format(
                    len(self.on_domain_urls)))
                self.on_domain_urls.add(url)
                yield scrapy.Request(url, callback=self.parse)
            elif url not in self.off_domain_urls:
                print('Offf domain links found: {}'.format(
                    len(self.on_domain_urls)))
                self.off_domain_urls.add(url)

process = CrawlerProcess()
process.crawl(GoodOnYouSpider)
process.start()
# Need access to off_domain_links

Как я могу получить доступ к off_domain_links? Я мог бы переместить его в глобальную сферу, но это кажется взломом. Я также могу добавить к файлу, но я хотел бы избежать файлового ввода-вывода, если это возможно. Есть ли лучший способ вернуть агрегированные данные, как это?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы проверяли Itempipeline? Я думаю, вам придется использовать это в этом сценарии и решить, что нужно сделать с переменной.

См .: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

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