Scrapy /从start_requests函数获取数据以解析函数

时间:2018-11-27 15:52:40

标签: python scrapy

我会尽力使这一点尽可能清楚。我有一个在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 

如何正确实现?谢谢!

1 个答案:

答案 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')