欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲(chóng)之scrapy中間件

柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲(chóng)之scrapy中間件

http://yzkb.51969.com/

????????scrapy主要有兩種----中間件爬蟲(chóng)中間件和下載器中間件,這里主要介紹的是下載器中間件DownloaderMiddleware,下載器中間件相當(dāng)于是在引擎與下載器中間的攔截器,可以在下載器發(fā)送請(qǐng)求之前對(duì)請(qǐng)求的參數(shù)進(jìn)行修改,比如ip代理,userAgent,都可以在DownloaderMiddleware中完成添加。DownloaderMiddleware默認(rèn)有五個(gè)方法:

process_request():聽(tīng)名字就知道是引擎從調(diào)度器拿到url后丟給下載器進(jìn)行的時(shí)候,要經(jīng)過(guò)process_request,ip代理和ua設(shè)置就是在這個(gè)位置,此方法有三種返回值,返回值是None則經(jīng)過(guò)下一個(gè)中間件,返回值是request對(duì)象則將resquest對(duì)象發(fā)送個(gè)引擎,并不再向后執(zhí)行,返回值是response對(duì)象,則將resp隊(duì)形返回給引擎,并不在向后執(zhí)行。

process_response():這個(gè)是當(dāng)下載器完成請(qǐng)求后,把請(qǐng)求返回給下載器的路上,要經(jīng)過(guò)process_response(),它只有兩種返回值,返回值若是response對(duì)象,繼續(xù)向下一個(gè)中間件進(jìn)行,若返回值是request()對(duì)象,直接返回給引擎,引擎會(huì)返回給調(diào)度器。

process_exception():當(dāng)請(qǐng)求發(fā)生錯(cuò)誤異常時(shí),這個(gè)中間件才會(huì)運(yùn)行

spider _opened():爬蟲(chóng)開(kāi)始前執(zhí)行。

from_craeler():這個(gè)比較特俗一點(diǎn),可以說(shuō)是自定義中間件方法的一個(gè)聲明,看介紹

def from_crawler(cls, crawler):

# This method is used by Scrapy to create your spiders.

#在Scrapy中使用這種方法來(lái)創(chuàng)建你自己的爬蟲(chóng)

s = cls()

#看著這個(gè)東西熟悉嗎,沒(méi)錯(cuò)這就是我們的spider_open方法。

#其中 s.spider_opened 是方法執(zhí)行的功能,signals.spider_opened執(zhí)行時(shí)間

crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)

#這里也可以用同樣發(fā)放寫(xiě)一個(gè)在爬蟲(chóng)關(guān)閉時(shí)調(diào)用的方法

crawler.signals.connect(s.spider_close, signal=signals.spider_closed)

return s

添加后記得新建一個(gè)名為spider_close方法。ctrl+鼠標(biāo)左鍵點(diǎn)擊signals.spider_opened可以看到scrapy中執(zhí)行時(shí)間都有哪些。

engine_started = object()

engine_stopped = object()

spider_opened = object()

spider_idle = object()

spider_closed = object()

spider_error = object()

request_scheduled = object()

request_dropped = object()

request_reached_downloader = object()

request_left_downloader = object()

response_received = object()

response_downloaded = object()

headers_received = object()

bytes_received = object()

item_scraped = object()

item_dropped = object()

item_error = object()

注意,中間件也是要在setting中打開(kāi)的。

scrapy中間件設(shè)置userAgent:

首先最好先在setting中準(zhǔn)備一個(gè)ua池,

UserAgent = [

"NOKIA5700/ UCWEB7.0.2.37/28/999",

"Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",

"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50",

"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)",

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)",

"Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12",

]

在process_request()調(diào)用時(shí)隨機(jī)選擇其中一個(gè):

from settings import UserAgent

def process_request(self, request, spider):

userAgent = random.choice(UserAgent)

request.headers['User-Agent'] = userAgent

return None

設(shè)置代理也是同樣的流程:免費(fèi)代理的話先在setting中建一個(gè)代理IP池,然后從中隨機(jī)選擇一個(gè),但是免費(fèi)的大多時(shí)不能用的,還是收費(fèi)的好用一些。

def process_request(self, request, spider):

ipstring = request.get('http://v2.api.juliangip.com/company/postpay/getips?num=1&pt=1&result_type=text&split=1&trade_no=6029336031352998&sign=c6deaa0dac6d6e7693')

request.meta['proxy'] = 'https://'+ipstring

return None

柚子快報(bào)邀請(qǐng)碼778899分享:爬蟲(chóng)之scrapy中間件

http://yzkb.51969.com/

文章鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/18987032.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄