任何方法都可以在scrapy上关联不同函数中的变量

2024-03-28 10:57:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用刮痧(ver:1.1.1)我不知道如何关联不同函数中的变量,有人能帮我吗

import os
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

import codecs
import scrapy

class LinkSpider(scrapy.Spider):
    name = 'go'
    allowed_domains = ['example_0.com']

def start_requests(self):
    with codecs.open('go.txt', 'r', 'utf-8') as f:
        start_urls = [url.strip() for url in f.readlines()]
    for start_url in start_urls:
        yield scrapy.Request(start_url, callback=self.parse_handle302, meta={'dont_redirect': True, 'handle_httpstatus_list': [302]})

def parse_handle302(self, response):
    product = {}
    r = re.compile(r'\d+')
    i = response.request.url
    tid = r.findall(i)
    yield scrapy.Request(i, callback=self.parse_handle301, dont_filter=True)

def parse_handle301(self, response):
    link = response.request.url
    print '\n'

    product['tid'] = tid
    product['link'] = link

    print product

当我跑的时候,它告诉我:

NameError: global name 'tid' is not defined

那么,如何通过重定向302和301将“tid”和“link”关联起来,在“start\u url”中的“start\u url”之后,每个“tid”映射自己的“link”


Tags: nameimportselfurlparseresponsedefsys