我会尽力使这一点尽可能清楚。我有一个在eBay上爬行的机器人。您可以在start_requests函数中看到,每个请求的URL都是从CSV文件的第一行构建的。
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
)
此文件的第一行实际上是产品代码。
我想在每次调用此产品代码时将其重用到我的parse函数中。
我会得到类似的东西:
def parse(self, response):
(...)
item = {}
item['product_code'] = "" # TOOK FROM START_REQUESTS
item['price'] = "" # TOOK FROM WEBSITE
如何正确实现?谢谢!
答案 0 :(得分:2)
尝试致电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')