从start_requests函数中抓取/获取数据以解析函数



我会尽可能清楚地说明这一点。我有一个机器人在ebay上爬行。每个请求的URL都是从CSV文件的第一行构建的,正如您在start_requests函数中看到的那样。

def start_requests(self):
base_url_1 = "https://www.ebay.fr/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw="
base_url_2 = "&_sacat=0"
script_dir = osp.dirname(osp.realpath(__file__))
file_path = osp.join(script_dir, 'files', 'start_file_ebay.csv')
input_file = open(file_path, 'r', encoding="utf-8", errors="ignore")
reader = csv.reader(input_file)
for row in reader:
if row:
url = row[0]
absolute_url = base_url_1 + url + base_url_2
print(absolute_url)
yield scrapy.Request(
absolute_url,
meta={
'dont_redirect': True,
"handle_httpstatus_list": [302, 301]
},
callback=self.parse
)

该文件的第一行实际上是产品代码。

我想要的是在每次调用解析函数时,将此产品代码重用到解析函数中。

我会得到这样的东西:

def parse(self, response):
(...)
item = {}
item['product_code'] = "" # TOOK FROM START_REQUESTS
item['price'] =  "" # TOOK FROM WEBSITE 

如何正确地实现这一点?非常感谢。

尝试调用start_requests:

yield scrapy.Request(
absolute_url,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302, 301],
'product_code': url,  # <- pass variable here
},
callback=self.parse
)

然后在parse函数中:item['product_code'] = response.meta.get('product_code')

最新更新