Scrapy:解析时出现意外的EOF

时间:2018-12-26 21:23:26

标签: scrapy scrapy-spider

我正在尝试从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

我希望获得传单名称的列表(沃尔玛,洛布拉斯等),但我怀疑自己对请求的处理不正确:

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 :(得分:0)

在编写第一个蜘蛛之前,应完成Scrapy tutorial

您的代码表明您对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没有基本的了解(至少缩进是如何工作的)。在开始使用Scrapy之前,您可能需要考虑学习更多的Python。