當使用scrapy爬取的資料不在同一張頁面中(一次請求與資料後解析無法獲得想要的全部資料),需要請求傳參,在第一次解析時例項化item,將item傳遞,再次將請求到的資料解析後,封裝在item中。
關鍵點
yield scrapy.request(callback=self.parse_detail,url = detail_url,meta=)
例如在豆瓣中,電影封面頁獲取電影名稱,在詳情頁獲取電影簡介:
先從起始網頁解析出電影名稱和詳情頁的url
將得到的電影名稱封裝在item中
將解析到的url作為下一次請求的引數,同時將item作為引數傳遞,作為下一次解析結果的容器
最後將含有一組完整資料的item提交
import scrapy
import re
from douban.items import doubanitem
class dbspiderspider(scrapy.spider):
name = 'dbspider'
start_urls = ['']
def parse(self, response):
title = re.findall('title":"(.*?)"',response.text,re.s,)
url_list = re.findall('url":"(.*?)"',response.text,re.s)
for name,url in zip(title,url_list):
detail_url = url.replace('\\','')
item = doubanitem()
item['name'] = name
yield scrapy.request(callback=self.parse_detail,url = detail_url,meta=)
#如果解析第2、3、4...頁的資料,再次遞迴。。。
def parse_detail(self,response):
item = response.meta['item']
#name = response.xpath('//*[@id="content"]/h1/span[1]/text()').exrtact_fist()
instr = response.xpath('//*[@id="link-report"]/span[1]/text()').extract_first()
item['instr'] = instr
yield item
爬蟲 2020 10 10 scrapy請求傳參
使用場景 爬取的資料不在同一頁面中。也就是說爬取的目標可能在詳情url中,即深度爬取。1.第一步 實現方法 重寫乙個解析詳情頁的parse方法,在原始parse方法下,手動進行請求傳送中,加入meta引數,即可將item傳遞給解析詳情頁的parse方法。就是將不同頁面解析返回的item封裝到同乙個i...
scrapy請求傳參 BOSS反爬
思路總結 第一次請求就攜帶cookie,其實他之前有302重定向的如果網路卡的情況下你就會發現,cookie就是這個請求設定的,但是不知道為啥,最開始的請求隱藏掉了 首先boss加了反爬 是cookies的 爬取的內容為職位和職位描述 coding utf 8 import scrapy from ...
axios 請求傳參
let params params 1.get 請求不傳參 eg this.axios.get then res 2.get 請求攜帶引數 get 請求攜帶引數,攜帶斜槓後引數 例如id id this.axios.get 動態的id then res get 攜帶請求引數,問號後邊的引數 例如 e...