爬蟲之meta引數

2021-10-23 20:44:21 字數 2525 閱讀 3448

meta屬性是字典,字典格式即,字典是一種可變容器模型,可儲存任意型別物件。request中meta引數的作用是傳遞資訊給下乙個函式,這些資訊可以是任意型別的,比如值、字串、列表、字典…方法是把要傳遞的資訊賦值給meta字典的鍵,分析見如下語句(爬蟲檔案):

class example(scrapy.spider):

name=『example』

allowed_domains=[『example.com』]

start_urls=[『

def parse(self,response):

#從start_urls中分析出的乙個**賦值給url

url=response.xpath(』…』).extract()

#examleclass是在items.py中定義的,下面會寫出。item本身是乙個字典

item=exampleclass()

item[『name』]=response.xpath(』…』).extract()

item[『htmlurl』]=response.xpath(』…』).extract()

#通過meta引數,把item這個字典,賦值給meta(本身也是乙個字典)

#中的key鍵。request在請求url後生成乙個request物件,這個

#(含有鍵值』key』,『key』的值是字典item)meta字典

#裡面的資訊會被「放」在request物件裡一起傳送給parse2()函式

yield request(url,meta=,callback=『parse2』)

def parse2(self,response):

item=response.meta[『key』]

#這個response已含有上述meta字典,此句將這個字典賦值給item,完成資訊傳遞。

#這個item已經和parse中的item一樣了

item[『text』]=response.xpath(』…』).extract()#item共三個鍵值,到這裡全部新增完畢了

yield item

items.py中語句如下:

class exampleclass(scrapy.item):

name = scrapy.field()

htmlurl = scrapy.field()

text=scrapy.field()

meta當然是可以傳遞cookie的(第一種):下面start_requests中鍵『cookiejar』是乙個特殊的鍵,scrapy在meta中見到此鍵後,會自動將cookie傳遞到要callback的函式中。既然是鍵(key),就需要有值(value)與之對應,例子中給了數字1,也可以是其他值,比如任意乙個字串。

def start_requests(self):

yield request(url,meta=,callback=self.parse)

需要說明的是,meta給『cookiejar』賦值除了可以表明要把cookie傳遞下去,還可以對cookie做標記。乙個cookie表示乙個會話(session),如果需要經多個會話對某**進行爬取,可以對cookie做標記,1,2,3,4…這樣scrapy就維持了多個會話。

def parse(self,response):

key=response.meta[『cookiejar』] #經過此操作後,key=1

yield request(url2,meta=,callback=『parse2』)

def parse2(self,response):

pass

上面這段和下面這段是等效的:

def parse(self,response):

yield request(url2,meta=,callback=『parse2』)

#這樣cookiejar的標記符還是數字1

def parse2(self,response):

pass

傳遞cookie的第二種寫法:如果不加標記,可以用下面的寫法:

#先引入cookiejar()方法

寫spider方法時:

def start_requests(self):

yield request(url,callback=self.parse)#此處寫self.parse或『parse』都可以

def parse(self,response):

cj = response.meta.setdefault(『cookie_jar』, cookiejar())

cj.extract_cookies(response, response.request)

container = cj._cookies

yield request(url2,cookies=container,meta=,callback=『parse2』)

def parse2(self,response):

pass

meta是淺複製,必要時需要深複製。可以這樣引入:

import copy

meta=

meta部分引數

name viewport content width device width,initial scale 1.0,maximum scale 1.0,minimum scale 1.0,user scalable no width 控制 viewport 的大小,可以指定的乙個值,如果 600,...

爬蟲超時引數

import requests from retrying import retry 專門請求url位址的方法 讓裝飾的函式反覆執行3次,三次全部報錯才會報錯,中間有一次正常,程式繼續往後走 retry stop max attempt number 3 def parse1 url url pri...

scrapy中的meta引數的使用

首先我們要知道meta是乙個字典,它的主要作用是用來傳遞資料的,meta 如果想在下乙個函式中取出value1,只需得到上乙個函式的meta key1 即可,因為meta是隨著request產生時傳遞的,下乙個函式得到的response物件中就會有meta,即response.meta.在items...