最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

26. Scrapy 框架-模擬登錄-Request、Response

2020-07-03 15:00 作者:自學(xué)Python的小姐姐呀  | 我要投稿

1. Scrapy-Request和Response(請(qǐng)求和響應(yīng))

Scrapy的Request和Response對(duì)象用于爬網(wǎng)網(wǎng)站。

通常,Request對(duì)象在爬蟲程序中生成并傳遞到系統(tǒng),直到它們到達(dá)下載程序,后者執(zhí)行請(qǐng)求并返回一個(gè)Response對(duì)象,該對(duì)象返回到發(fā)出請(qǐng)求的爬蟲程序。



2. Request對(duì)象



一個(gè)Request對(duì)象表示一個(gè)HTTP請(qǐng)求,它通常是在爬蟲生成,并由下載執(zhí)行,從而生成Response

  • 參數(shù)

    ?request_with_cookies = Request(url="http://www.example.com",
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? cookies=[{'name': 'currency',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'value': 'USD',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'domain': 'example.com',
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?'path': '/currency'}])

    后一種形式允許定制 cookie的屬性domain和path屬性。這只有在保存Cookie用于以后的請(qǐng)求時(shí)才有用

    • 使用dict:

    • url(string) - 此請(qǐng)求的網(wǎng)址

    • callback(callable) - 將使用此請(qǐng)求的響應(yīng)(一旦下載)作為其第一個(gè)參數(shù)調(diào)用的函數(shù)。有關(guān)更多信息,請(qǐng)參閱下面的將附加數(shù)據(jù)傳遞給回調(diào)函數(shù)。如果請(qǐng)求沒有指定回調(diào),parse()將使用spider的 方法。請(qǐng)注意,如果在處理期間引發(fā)異常,則會(huì)調(diào)用errback。

    • method(string) - 此請(qǐng)求的HTTP方法。默認(rèn)為'GET'??稍O(shè)置為"GET", "POST", "PUT"等,且保證字符串大寫

    • meta(dict) - 屬性的初始值Request.meta,在不同的請(qǐng)求之間傳遞數(shù)據(jù)使用

    • body(str或unicode) - 請(qǐng)求體。如果unicode傳遞了a,那么它被編碼為 str使用傳遞的編碼(默認(rèn)為utf-8)。如果 body沒有給出,則存儲(chǔ)一個(gè)空字符串。不管這個(gè)參數(shù)的類型,存儲(chǔ)的最終值將是一個(gè)str(不會(huì)是unicode或None)。

    • headers(dict) - 這個(gè)請(qǐng)求的頭。dict值可以是字符串(對(duì)于單值標(biāo)頭)或列表(對(duì)于多值標(biāo)頭)。如果 None作為值傳遞,則不會(huì)發(fā)送HTTP頭.一般不需要

    • encoding: 使用默認(rèn)的 'utf-8' 就行。

    • cookie(dict或list) - 請(qǐng)求cookie。這些可以以兩種形式發(fā)送。

      request_with_cookies = Request(url="http://www.sxt.cn/index/login/login.html",)

    • 使用列表:

將附加數(shù)據(jù)傳遞給回調(diào)函數(shù)

請(qǐng)求的回調(diào)是當(dāng)下載該請(qǐng)求的響應(yīng)時(shí)將被調(diào)用的函數(shù)。將使用下載的Response對(duì)象作為其第一個(gè)參數(shù)來調(diào)用回調(diào)函數(shù)

3 請(qǐng)求子類 FormRequest對(duì)象

FormRequest類擴(kuò)展了Request具有處理HTML表單的功能的基礎(chǔ)。它使用lxml.html表單 從Response對(duì)象的表單數(shù)據(jù)預(yù)填充表單字段

class scrapy.http.FormRequest(url[, formdata, ...])

本FormRequest類增加了新的構(gòu)造函數(shù)的參數(shù)。其余的參數(shù)與Request類相同,這里沒有記錄

  • 參數(shù):formdata(元組的dict或iterable) - 是一個(gè)包含HTML Form數(shù)據(jù)的字典(或(key,value)元組的迭代),它將被url編碼并分配給請(qǐng)求的主體。

該FormRequest對(duì)象支持除標(biāo)準(zhǔn)以下類方法Request的方法:

classmethod from_response(response[, formname=None, formid=None, formnumber=0, formdata=None, formxpath=None, formcss=None, clickdata=None, dont_click=False, ...])

返回一個(gè)新FormRequest對(duì)象,其中的表單字段值已預(yù)先<form>填充在給定響應(yīng)中包含的HTML 元素中.

參數(shù):

  • response(Responseobject) - 包含將用于預(yù)填充表單字段的HTML表單的響應(yīng)

  • formname(string) - 如果給定,將使用name屬性設(shè)置為此值的形式

  • formid(string) - 如果給定,將使用id屬性設(shè)置為此值的形式

  • formxpath(string) - 如果給定,將使用匹配xpath的第一個(gè)表單

  • formcss(string) - 如果給定,將使用匹配css選擇器的第一個(gè)形式

  • formnumber(integer) - 當(dāng)響應(yīng)包含多個(gè)表單時(shí)要使用的表單的數(shù)量。第一個(gè)(也是默認(rèn))是0

  • formdata(dict) - 要在表單數(shù)據(jù)中覆蓋的字段。如果響應(yīng)元素中已存在字段,則其值將被在此參數(shù)中傳遞的值覆蓋

  • clickdata(dict) - 查找控件被點(diǎn)擊的屬性。如果沒有提供,表單數(shù)據(jù)將被提交,模擬第一個(gè)可點(diǎn)擊元素的點(diǎn)擊。除了html屬性,控件可以通過其相對(duì)于表單中其他提交表輸入的基于零的索引,通過nr屬性來標(biāo)識(shí)

  • dont_click(boolean) - 如果為True,表單數(shù)據(jù)將在不點(diǎn)擊任何元素的情況下提交

3.1 請(qǐng)求使用示例

使用FormRequest通過HTTP POST發(fā)送數(shù)據(jù)

如果你想在你的爬蟲中模擬HTML表單POST并發(fā)送幾個(gè)鍵值字段,你可以返回一個(gè)FormRequest對(duì)象(從你的爬蟲)像這樣:

return [FormRequest(url="http://www.example.com/post/action",
? ? ? ? ? ? ? ? ? ?formdata={'name': 'John Doe', 'age': '27'},
? ? ? ? ? ? ? ? ? ?callback=self.after_post)]

使用FormRequest.from_response()來模擬用戶登錄

網(wǎng)站通常通過元素(例如會(huì)話相關(guān)數(shù)據(jù)或認(rèn)證令牌(用于登錄頁面))提供預(yù)填充的表單字段。進(jìn)行剪貼時(shí),您需要自動(dòng)預(yù)填充這些字段,并且只覆蓋其中的一些,例如用戶名和密碼。您可以使用 此作業(yè)的方法。這里有一個(gè)使用它的爬蟲示例:


4 響應(yīng)對(duì)象

class scrapy.http.Response(url[, status=200, headers=None, body=b'', flags=None, request=None])

一個(gè)Response對(duì)象表示的HTTP響應(yīng),這通常是下載(由下載),并供給到爬蟲進(jìn)行處理

參數(shù):

  • url(string) - 此響應(yīng)的URL

  • status(integer) - 響應(yīng)的HTTP狀態(tài)。默認(rèn)為200

  • headers(dict) - 這個(gè)響應(yīng)的頭。dict值可以是字符串(對(duì)于單值標(biāo)頭)或列表(對(duì)于多值標(biāo)頭)

  • body(str) - 響應(yīng)體。它必須是str,而不是unicode,除非你使用一個(gè)編碼感知響應(yīng)子類,如 TextResponse

  • flags(list) - 是一個(gè)包含屬性初始值的 Response.flags列表。如果給定,列表將被淺復(fù)制

  • request(Requestobject) - 屬性的初始值Response.request。這代表Request生成此響應(yīng)


5 模擬登錄

用的函數(shù):

  • start_requests()可以返回一個(gè)請(qǐng)求給爬蟲的起始網(wǎng)站,這個(gè)返回的請(qǐng)求相當(dāng)于start_urls,start_requests()返回的請(qǐng)求會(huì)替代start_urls里的請(qǐng)求

  • Request()get請(qǐng)求,可以設(shè)置,url、cookie、回調(diào)函數(shù)

  • FormRequest.from_response()表單post提交,第一個(gè)必須參數(shù),上一次響應(yīng)cookie的response對(duì)象,其他參數(shù),cookie、url、表單內(nèi)容等

  • yield Request()可以將一個(gè)新的請(qǐng)求返回給爬蟲執(zhí)行

在發(fā)送請(qǐng)求時(shí)cookie的操作,

  • meta={'cookiejar':1}表示開啟cookie記錄,首次請(qǐng)求時(shí)寫在Request()里

  • meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response的cookie,寫在FormRequest.from_response()里post授權(quán)

  • meta={'cookiejar':True}表示使用授權(quán)后的cookie訪問需要登錄查看的頁面


獲取Scrapy框架Cookies

樣例代碼

start_requests()方法,可以返回一個(gè)請(qǐng)求給爬蟲的起始網(wǎng)站,這個(gè)返回的請(qǐng)求相當(dāng)于start_urls,start_requests()返回的請(qǐng)求會(huì)替代start_urls里的請(qǐng)求

在發(fā)送請(qǐng)求時(shí)cookie的操作

meta={'cookiejar':1}表示開啟cookie記錄,首次請(qǐng)求時(shí)寫在Request()里

meta={'cookiejar':response.meta['cookiejar']}表示使用上一次response的cookie,寫在Request里post授權(quán)



26. Scrapy 框架-模擬登錄-Request、Response的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
菏泽市| 祁阳县| 房山区| 青浦区| 剑阁县| 新河县| 桐乡市| 永定县| 山阳县| 华亭县| 旬阳县| 县级市| 赣榆县| 沾益县| 麻江县| 沅陵县| 宾阳县| 南溪县| 敖汉旗| 西和县| 盐亭县| 邢台市| 旬邑县| 建始县| 温州市| 江山市| 明溪县| 浦城县| 万年县| 宁陵县| 泰州市| 根河市| 定边县| 历史| 赤水市| 长兴县| 彰武县| 淄博市| 抚远县| 平邑县| 宁安市|