日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

$.post把表单对象传递过去_第二章 第三节 Request请求对象详解

發(fā)布時(shí)間:2025/4/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 $.post把表单对象传递过去_第二章 第三节 Request请求对象详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Request對(duì)象和Response對(duì)象是必須熟悉的。
Request對(duì)象負(fù)責(zé)請(qǐng)求的構(gòu)造和處理
Response對(duì)象負(fù)責(zé)返回資源的解析和處理

一、Request對(duì)象參數(shù)

Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])

參數(shù)默認(rèn)值是否必須說明url無Y請(qǐng)求的urlcallbackself.parseY下載器完成后的回調(diào)函數(shù)methodGETN請(qǐng)求類型: 支持GET、POST、PUT...headers{}N默認(rèn)無, 但是有中間件會(huì)構(gòu)造默認(rèn)的請(qǐng)求頭bodyb''N請(qǐng)求體, 只支持string, 內(nèi)部會(huì)轉(zhuǎn)換成bytecookies{}N附加cookie信息meta{}N元數(shù)據(jù)priority0N請(qǐng)求優(yōu)先級(jí), 數(shù)字越大, 優(yōu)先級(jí)越高dont_filterFalseN是否過濾重復(fù)請(qǐng)求, True: 不過濾, False: 過濾, 默認(rèn)會(huì)過濾重復(fù)請(qǐng)求errbackN發(fā)生錯(cuò)誤時(shí)的回調(diào)函數(shù), 部分中間件中的錯(cuò)誤也會(huì)傳送給這個(gè)方法flags[]N可以在中間件針對(duì)性的處理每個(gè)requestcb_kwargs{}N傳遞給callback方法的參數(shù)

1. 發(fā)起一般請(qǐng)求

# -*- coding: utf-8 -*- import scrapy from ccidcom.items import DocumentItemclass CcidcomSpider(scrapy.Spider):name = 'ccidcomSpider'allowed_domains = ['www.ccidcom.com']def start_requests(self):yield scrapy.Request('http://www.ccidcom.com/yaowen/index.html',callback=self.parse,headers={ # 指定請(qǐng)求頭'Content-Type': 'text',},cookies={'test_cookie': 'aaa'},meta={'column': 'yaowen'},dont_filter=True,errback=self.parse_error,cb_kwargs={'column': 'yaowen'})def parse(self, response, column):request = response.requestprint('自定義參數(shù): ', column)print('請(qǐng)求頭: ', request.headers)print('請(qǐng)求Cookies: ', request.cookies)print('元數(shù)據(jù): ', response.meta)def parse_error(self, response):pass

運(yùn)行scrapy crawl ccidcomSpider

# 輸出 ... 自定義參數(shù): yaowen 請(qǐng)求頭: {b'Content-Type': [b'text'], b'Accept': [b'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'], b'Accept-Language': [b'en'], b'User-Agent': [b'Scrapy/1.7.3 (+https://scrapy.org)'], b'Accept-Encoding': [b'gzip,deflate'], b'Cookie': [b'test_cookie=aaa']} 請(qǐng)求Cookies: {'test_cookie': 'aaa'} 元數(shù)據(jù): {'column': 'yaowen', 'download_timeout': 180.0, 'download_slot': 'www.ccidcom.com', 'download_latency': 0.19195008277893066} ...

我們可以看到, 除了我們自己添加的headers, scrapy也會(huì)添加一些其他headers選項(xiàng)cookies會(huì)添加我們指定的cookie信息meta 可以將請(qǐng)求的所需要的數(shù)據(jù)從request傳遞到response中, 這樣我們就可以在parse方法中直接讀取到了, 在這里也要注意一點(diǎn), 禁止meta里傳遞request對(duì)象

而且在meta中也附加了一些數(shù)據(jù), download_timeout是指下載超時(shí)時(shí)間, download_slot: 跟蹤的下載器插槽, 也就是調(diào)度器用來區(qū)分到底是哪個(gè)下載器, 根據(jù)主域名進(jìn)行區(qū)分, download_latency: 下載器花費(fèi)掉的時(shí)間, 單位是s

# 下面這種寫法是完全禁止的 _req = scrapy.Request('http://www.baidu.com') yield scrapy.Request('http://www.baidu.com', meta={'request': _req})

2. meta詳解

  • meta里的指定的key, 不能再用做業(yè)務(wù), 否則會(huì)出錯(cuò)
  • meta里禁止傳遞對(duì)象等, 防止無法銷毀掉
  • key說明dont_redirectTrue/False, 禁止301,302跳轉(zhuǎn)dont_retryTrue/False, 禁止失敗重試handle_httpstatus_list允許的http狀態(tài)碼 [200, 400]handle_httpstatus_allTrue/False, 所有的狀態(tài)碼都是正常請(qǐng)求dont_merge_cookiesTrue/False禁止合并cookies, 當(dāng)設(shè)置cookies參數(shù)的時(shí)候, 默認(rèn)scrapy的cookie中間件可能覆蓋掉你設(shè)置的cookies(key一樣), 設(shè)置為False,則使用你設(shè)置的cookiescookiejar指定傳遞的cookiejar版本, scrapy中cookie不會(huì)自動(dòng)傳遞, 所以必須指定一個(gè)cookiejar來傳遞, 稍后會(huì)詳解dont_cacheTrue/False, 禁止緩存此請(qǐng)求redirect_reasons保存重定向的理由, [301,302, 'meta refresh']redirect_urls保存經(jīng)過重定向的urlbindaddress設(shè)置請(qǐng)求的源ip, 有時(shí)候不起作用dont_obey_robotstxt是否遵守robot.txt協(xié)議download_timeout下載超時(shí)時(shí)間設(shè)置, 默認(rèn)是設(shè)置里的DOWNLOAD_TIMEOUTdownload_maxsize下載的最大資源限制download_latency只讀, 從開始請(qǐng)求到請(qǐng)求完成的時(shí)間download_fail_on_dataloss是否在響應(yīng)中斷是拋出錯(cuò)誤, True/Falseproxy設(shè)置代理ipftp_userftp請(qǐng)求的用戶ftp_passwordftp請(qǐng)求的密碼referrer_policyheader頭中的Referrer-Policy的值max_retry_times最大重試次數(shù)

    這里的參數(shù), 在稍后會(huì)詳細(xì)講解

    二、FormRequest對(duì)象

    FormRequest對(duì)象用來模擬post表單請(qǐng)求

    FormRequest對(duì)象的參數(shù)和Request基本都是一樣的, 但是多了一個(gè)formdataformdata是一個(gè)dict或者可迭代的元組, 包含form表單請(qǐng)求的具體內(nèi)容

    1. 發(fā)起表單請(qǐng)求

    def start_requests(self):yield scrapy.FormRequest(url='http://www.ccidcom.com/user/dologin.do',formdata={'username': '你的賬號(hào)','password': '你的登錄密碼'},callback=self.after_login)

    運(yùn)行爬蟲scrapy crawl CcidcomFormSpider
    查看輸出:

    2019-08-16 14:54:41 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.ccidcom.com/user/dologin.do> (referer: None) 返回的數(shù)據(jù): {"code":1} 2019-08-16 14:54:41 [scrapy.core.engine] INFO: Closing spider (finished)

    2. 從資源中獲取表單數(shù)據(jù)提交, form_response

    這種方法, 會(huì)讀取到form標(biāo)簽中的所有元素的信息, 并且填入你指定的表單的值, 然后發(fā)起請(qǐng)求
    目的在于, 很多表單中有一些隱藏的元素等, 或者表單唯一值, 來防止表單被重復(fù)提交, 這個(gè)方法就可以自動(dòng)去獲取到表單中的元素的值來提交

    具體的方法:classmethod from_response(response[, formname=None, formid=None, formnumber=0, formdata=None, formxpath=None, formcss=None, clickdata=None, dont_click=False, …])

    key默認(rèn)值是否必須說明responseY上一頁請(qǐng)求拿到的response對(duì)象formnameNoneN如果給出, 則解析form標(biāo)簽中含有name=value的表單formidNoneN同上, 解析id=給定值的表單formxpathNoneN同上, 解析指定的xpath的表單formcssNoneN同上, 解析給定的css的表單formnumber0N如果解析出來, 包含多個(gè)表單, 指定具體哪個(gè)表單, 默認(rèn)0formdata{}N要提交的表單信息clickdataNoneN給定可點(diǎn)擊的元素dont_clickFalseN如果是True, 則表單會(huì)在不包含點(diǎn)擊按鈕的情況下提交

    優(yōu)勢:

  • 不用去手動(dòng)看表單中的隱藏元素, 也不用再代碼中指定了, scrapy會(huì)自動(dòng)幫你做到
  • 不用在代碼里指定表單的提交地址, scrapy會(huì)從標(biāo)簽自動(dòng)獲取
  • 缺點(diǎn):

  • 現(xiàn)在絕大部分網(wǎng)站都是js模擬表單請(qǐng)求的, 根本沒有標(biāo)簽, 這種情況不適用的
  • 頁面是渲染出來的, 也無法使用這個(gè)方法
  • 現(xiàn)在我們來看一個(gè)例子

    def start_requests(self):# 先訪問表單所在的頁面yield scrapy.Request('http://www.dcic-china.com/login/index.html',callback=self.parse)def parse(self, response):# 這個(gè)方法會(huì)將上一個(gè)表單頁面的資源傳入, 并且自動(dòng)解析表單元素# 然后補(bǔ)足你提供的表單的值(你自定義的值可能會(huì)覆蓋表單頁面的值)yield scrapy.FormRequest.from_response(response,formdata={'username': '你的賬號(hào)','password': '你的密碼','code': '1111'},callback=self.after_login)def after_login(self, response):print('返回的數(shù)據(jù): {}'.format(response.css('p.error::text').get()))

    運(yùn)行爬蟲

    ... 2019-08-16 15:11:12 [scrapy.core.engine] DEBUG: Crawled (200) <POST http://www.dcic-china.com/login/index.html> (referer: http://www.dcic-china.com/login/index.html) 返回的數(shù)據(jù): 驗(yàn)證碼不正確 2019-08-16 15:11:12 [scrapy.core.engine] INFO: Closing spider (finished) ...

    歡迎關(guān)注Python開發(fā)之路(微信號(hào): python-developer)

    總結(jié)

    以上是生活随笔為你收集整理的$.post把表单对象传递过去_第二章 第三节 Request请求对象详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 在线观看不卡一区 | 国产成人精品一区 | 在线免费h | 中文字幕导航 | 国产成人精品综合在线观看 | 在线观看亚洲区 | 99色在线视频 | 亚洲欧美综合色 | 私人影院毛片 | 国产精品视频专区 | 伊人久综合 | 国产又色又爽又高潮免费 | 国产日韩欧美一区二区东京热 | 一区二区三区激情视频 | 制服丝袜av在线 | 亚洲精品乱码久久久久久麻豆不卡 | 羞羞动态图| 国产精品伊人久久 | 瑟瑟网站在线观看 | 国产精品视频专区 | 久久久99精品国产一区二区三区 | 黄色网址大全免费 | 欧美日韩偷拍视频 | 清冷学长被爆c躁到高潮失禁 | 日本黄色高清视频 | 亚洲91av| 久久婷婷国产 | 欧美在线小视频 | 91丨porny丨首页| 日韩在线精品强乱中文字幕 | 成人av影视在线 | 国精产品一区一区三区有限公司杨 | 亚洲一级成人 | 久久机热 | 黑人巨大精品欧美一区二区免费 | 成人免费高清在线播放 | 精品日韩在线播放 | 在线观看日本网站 | 免费黄色在线观看 | 性史性农村dvd毛片 日韩精品在线视频观看 | 在线观看视频国产 | 内地级a艳片高清免费播放 91在线精品一区二区 | 亚洲欧美日韩在线播放 | 国产秋霞 | 狠狠操在线 | 91色漫| 色干网| 黄色三级免费网站 | 国产免费无码XXXXX视频 | 黄色小说网站在线观看 | 日本污网站 | 国产三级久久 | 国产色一区 | 午夜久久久久久久久久久 | 在线免费小视频 | 秋葵视频污 | a级片在线 | 久久久999 | 国产黄色美女视频 | 另类一区二区三区 | 无码国产精品久久一区免费 | 中文字幕码精品视频网站 | 97夜色| 亚洲熟妇无码一区二区三区 | 日韩av免费看 | 国产人妻精品午夜福利免费 | 日本美女动态图 | 日本欧美一区二区 | 亚洲激情网站 | 污黄视频在线观看 | 日韩欧美精品 | 91精品国产91久久久久福利 | 国产日本欧美在线 | 欧美性猛交乱大交 | 欧美成人三区 | 在线免费看黄 | 韩国伦理在线 | 国产精选一区二区三区 | 国产亚洲欧美一区二区三区 | √资源天堂中文在线视频 | 国产欧美日韩视频在线观看 | 富婆如狼似虎找黑人老外 | 黄色av中文字幕 | 天堂网视频 | 免费看美女隐私网站 | 国产三级在线免费 | aa片在线观看视频在线播放 | 18黄暴禁片在线观看 | 免费色片 | 日韩av激情 | 蜜乳av一区二区三区 | av制服丝袜在线 | 欧美天天射 | 在线视频一二区 | 免费在线看污 | 91精品国产一区二区在线观看 | 古装三级吃奶做爰 | 国产精品国产三级国产普通话对白 | 成人黄网免费观看视频 |