我正在尝试从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
如果我的怀疑是正确的,有人可以帮助我解决困境吗?
答案 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。