Scrapy: неожиданный EOF при разборе - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь почистить листовки с сайта flipp.com.Этот код является попыткой изменить почтовый индекс на «90210» (произвольный почтовый индекс).

Это мой код:

СЕЙЧАС ИЗМЕНЕНО ИЗ ПОМОЩИ В КОММЕНТАРИЯХ

class flippSpider(scrapy.Spider):
    name = "flippSpider"
    start_urls = ["https://flipp.com/flyers/groceries"]

    def parse(self, response):
        flyers = []
        postal_code = "90210" #RANDOM VALUE
        url = "https://gateflipp.flippback.com/bf/flipp/data?locale=en-ca&postal_code=" +postal_code+"&sid=30786756034414076"
    response = scrapy.Request(url)
    groceries_url = response.urljoin(response.url, "/groceries")
    groceries_response = scrapy.Request(groceries_url)
    flyer_names = groceries_response.css(".flyer-name")
    for flyer_name in flyer_names:
        print(flyer_name)
        flyers.append(flyer_name)
    return flyers

Я ожидаю получить список имен флаеров(Walmart, Loblaws и т. Д.), Но я подозреваю, что сделал что-то неправильно с моим запросом:

scrapy.Request(url)

и с тем, как я обработал свой ответ на удаление имен листовок от Flipp:

groceries_response = scrapy.Request(groceries_url)
flyer_names = groceries_response.css(".flyer-name")

потому что всякий раз, когда я пытаюсь запустить своего паука, я получаю:

error: unexpected EOF while parsing, line 12

делает ли кто-нибудь, если мои подозрения верны, и может помочь мне с моей дилеммой?

1 Ответ

0 голосов
/ 16 января 2019

Прежде чем написать свой первый паук, вы должны пройти Учебное пособие по Scrapy .

Ваш код предполагает, что у вас нет базовых знаний о Scrapy.Вы ожидаете получить ответ от создания объекта запроса:

def parse(self, response):
    # [code before]
    response = scrapy.Request(url)
    # [code after]

Вместо этого вы должны указать обратный вызов в вашем объекте запроса, получить объект и обработать ответ в обратном вызове:

def parse(self, response):
    # [code before]
    yield scrapy.Request(url, callback=self.parse2)

def parse2(self, response):
    # [code after]

Ваш код также предполагает, что вы не имеете базового понимания Python (по крайней мере, как работает отступ).Возможно, вы захотите узнать больше о Python, прежде чем начинать со Scrapy.

...