Scrapy Parse Callback не определен - PullRequest
0 голосов
/ 01 мая 2020

У меня есть CSV, полный URL-адресов, которые я хочу сканировать, которые находятся в urls-test.csv. Я хочу открыть файл CSV и сканировать каждый URL (удален из ошибки ниже, поэтому он не показан) и извлечь элемент css. Когда я пытаюсь запустить моего паука, я получаю следующую ошибку:

2020-04-30 15:09:51 [scrapy.core.scraper] ERROR: Spider error processing <GET https://www.websiteexamples.com/this-is-fake> (referer: None)
Traceback (most recent call last):
  File "/Users/jcsmith427/PycharmProjects/sstksitemaps/venv/lib/python3.8/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
    current.result = callback(current.result, *args, **kw)
  File "/Users/jcsmsith427/PycharmProjects/sstksitemaps/venv/lib/python3.8/site-packages/scrapy/spiders/__init__.py", line 90, in parse
    raise NotImplementedError('{}.parse callback is not defined'.format(self.__class__.__name__))
NotImplementedError: QuoteSpider.parse callback is not defined

Мой паук выглядит следующим образом:

items.py

import scrapy
class SstkscrapeItem(scrapy.Item):
contriburl = scrapy.Field()

sstkscrape_spider.py

import scrapy
from ..items import SstkscrapeItem

class QuoteSpider(scrapy.Spider):
name = 'sstkscrape'
allowed_domains = ["shutterstock.com"]
f = open("urls-test.csv")
start_urls = [url.strip() for url in f.readlines()]
f.close()

def parse(self, response):
    items = SstkscrapeItem()
    contriburl = response.css(".b_q_e a::attr(href)").extract()
    items['contriburl'] = contriburl
    yield items

pipelines.py

class SstkscrapePipeline:
def process_item(self, item, spider):
    return item

1 Ответ

0 голосов
/ 01 мая 2020

Я бы прочитал файл в методе start_requests и вывел бы запросы непосредственно оттуда вместо того, чтобы помещать их все в большой список для начала. Вы можете попробовать следующий (непроверенный) подход:

class QuoteSpider(scrapy.Spider):
    name = 'sstkscrape'
    allowed_domains = ["shutterstock.com"]

    def start_requests(self):
        with open("urls-test.csv", 'r') as f:
            while True:
                url = f.readline()
                yield scrapy.Request(url.strip(),
                                     callback=self.parse,
                                     dont_filter=True)

    def parse(self, response):
        items = SstkscrapeItem()
        contriburl = response.css(".b_q_e a::attr(href)").extract()
        items['contriburl'] = contriburl
        yield items

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