Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在scrapy中跟踪请求_Python_Web Scraping_Scrapy - Fatal编程技术网

Python 如何在scrapy中跟踪请求

Python 如何在scrapy中跟踪请求,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我正在抓取一张书单,我有 start_urls = ['page_1_id', 'page_2_id', 'page_1_2', 'page_3_id'] 现在,当我进行抓取时,如果页面存在,当我尝试时,它的url会改变: response.url 或 我不明白 'page_1_id', 'page_2_id', 'page_1_2', 'page_3_id' 由于scrapy发出异步请求,我需要'id'来匹配返回的数据,所以我需要的是传递'id;作为每个请求中的参数,我在列表中思考 s

我正在抓取一张书单,我有

start_urls = ['page_1_id', 'page_2_id', 'page_1_2', 'page_3_id']
现在,当我进行抓取时,如果页面存在,当我尝试时,它的url会改变:

response.url 

我不明白

'page_1_id', 'page_2_id', 'page_1_2', 'page_3_id'
由于scrapy发出异步请求,我需要'id'来匹配返回的数据,所以我需要的是传递'id;作为每个请求中的参数,我在列表中思考

start_urls = ['page_1_id', 'page_2_id', 'page_1_2', 'page_3_id']

id = ['id_1','id_2','id_3']
但必须解决一些问题,首先,我不知道如何传递这些论点,其次,它不会起作用,因为我不知道在发出请求时的顺序。所以我可能需要使用字典,有一种方法可以制作这样的东西:

start_urls = {'page_1_id':id_1, 'page_2_id':id_2, 'page_1_3':id_3, 'page_4_id':id_4}
我的蜘蛛非常简单,我只需要获得一个链接和id:

def parse(self, response):


    myItem = Item()
    myItem = Item(link=response.xpath('//*[@id="container"]/div/table/tbody/tr[1]/td/h4[1]/a/@href').extract())

    return myItem
只需添加“id”

def解析(自我,响应):


您可以通过覆盖
start\u requests()
方法来覆盖scrapy开始生成请求的方式。似乎您想这样做,然后将id放入
request.meta
属性中,将其带到
parse
回调。比如:

start_urls = ['page_1_id', 'page_2_id', 'page_1_2', 'page_3_id']

def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(url, 
                             meta={'page_id': url.split('_',1)[-1] # 1_id})

def parse(self, response):
    print(response.meta['page_id'])
    # 1_id
myItem = Item()
myItem = Item(link=response.xpath('//*[@id="container"]/div/table/tbody/tr[1]/td/h4[1]/a/@href').extract(),id)

return myItem
start_urls = ['page_1_id', 'page_2_id', 'page_1_2', 'page_3_id']

def start_requests(self):
    for url in self.start_urls:
        yield scrapy.Request(url, 
                             meta={'page_id': url.split('_',1)[-1] # 1_id})

def parse(self, response):
    print(response.meta['page_id'])
    # 1_id