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