成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Python爬蟲中urllib3與urllib的區別是什么

瀏覽:106日期:2022-06-14 18:10:52
目錄urllib庫urllib.request模塊Request對象1 . 請求頭添加2. 操作cookie3. 設置代理urllib.parse模塊urllib.error模塊urllib.robotparse模塊 網絡庫urllib3網絡請求GET請求POST請求HTTP響應頭上傳文件超時處理urllib庫

urllib 是一個用來處理網絡請求的python標準庫,它包含4個模塊。

urllib.request---請求模塊,用于發起網絡請求 urllib.parse---解析模塊,用于解析URL urllib.error---異常處理模塊,用于處理request引起的異常 urllib.robotparser robots.tx---用于解析robots.txt文件urllib.request模塊

request模塊主要負責構造和發起網絡請求,并在其中添加Headers,Proxy等。 利用它可以模擬瀏覽器的請求發起過程。

發起網絡請求 操作cookie 添加Headers 使用代理

關于urllib.request.urlopen參數的介紹

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

urlopen是一個簡單發送網絡請求的方法。它接收一個字符串格式的url,它會向傳入的url發送網絡請求,然后返回結果。

先寫一個簡單的例子:

from urllib import requestresponse = request.urlopen(url=’http://www.httpbin.org/get’)print(response.read().decode())

urlopen默認會發送get請求,當傳入data參數時,則會發起POST請求。data參數是字節類型、者類文件對象或可迭代對象。

from urllib import requestresponse = request.urlopen(url=’http://www.httpbin.org/post’, data=b’username=q123&password=123’)print(response.read().decode())

還才可以設置超時,如果請求超過設置時間,則拋出異常。timeout沒有指定則用系統默認設置,timeout只對,http,https以及ftp連接起作用。它以秒為單位,比如可以設置timeout=0.1 超時時間為0.1秒。

from urllib import requestresponse = request.urlopen(url=’https://www.baidu.com/’,timeout=0.1)Request對象

利用openurl可以發起最基本的請求,但這幾個簡單的參數不足以構建一個完整的請求,可以利用更強大的Request對象來構建更加完整的請求。

1 . 請求頭添加

通過urllib發送的請求會有一個默認的Headers: “User-Agent”:“Python-urllib/3.6”,指明請求是由urllib發送的。所以遇到一些驗證User-Agent的網站時,需要我們自定義Headers把自己偽裝起來。

from urllib import requestheaders ={ ’Referer’: ’https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&tn=baidu&wd=python%20urllib%E5%BA%93&oq=python%2520urllib%25E5%25BA%2593&rsv_pq=947af0af001c94d0&rsv_t=66135egC273yN5Uj589q%2FvA844PvH9087sbPe9ZJsjA8JA10Z2b3%2BtWMpwo&rqlang=cn&rsv_enter=0&prefixsug=python%2520urllib%25E5%25BA%2593&rsp=0’, ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36’}response = request.Request(url=’https://www.baidu.com/’,headers=headers)response = request.urlopen(response)print(response.read().decode())2. 操作cookie

在開發爬蟲過程中,對cookie的處理非常重要,urllib的cookie的處理如下案例

from urllib import requestfrom http import cookiejar# 創建一個cookie對象cookie = cookiejar.CookieJar()# 創一個cookie處理器cookies = request.HTTPCookieProcessor(cookie)# 以它為參數,創建opener對象opener = request.build_opener(cookies)# 使用這個opener 來發請求res =opener.open(’https://www.baidu.com/’)print(cookies.cookiejar)3. 設置代理

運行爬蟲的時候,經常會出現被封IP的情況,這時我們就需要使用ip代理來處理,urllib的IP代理的設置如下:

from urllib import requesturl =’http://httpbin.org/ip’#代理地址proxy ={’http’:’172.0.0.1:3128’}# 代理處理器proxies =request.ProxyBasicAuthHandler(proxy)# 創建opener對象opener = request.build_opener(proxies)res =opener.open(url)print(res.read().decode())

urlib庫中的類或或者方法,在發送網絡請求后,都會返回一個urllib.response的對象。它包含了請求回來的數據結果。它包含了一些屬性和方法,供我們處理返回的結果

read() 獲取響應返回的數據,只能用一次 readline() 讀取一行 info() 獲取響應頭信息 geturl() 獲取訪問的url getcode() 返回狀態碼urllib.parse模塊

parse.urlencode() 在發送請求的時候,往往會需要傳遞很多的參數,如果用字符串方法去拼接會比較麻煩,parse.urlencode()方法就是用來拼接url參數的。

from urllib import parseparams = {’wd’:’測試’, ’code’:1, ’height’:188}res = parse.urlencode(params)print(res)

打印結果為wd=%E6%B5%8B%E8%AF%95&code=1&height=188

也可以通過parse.parse_qs()方法將它轉回字典

print(parse.parse_qs(’wd=%E6%B5%8B%E8%AF%95&code=1&height=188’))urllib.error模塊

error模塊主要負責處理異常,如果請求出現錯誤,我們可以用error模塊進行處理 主要包含URLError和HTTPError

URLError:是error異常模塊的基類,由request模塊產生的異常都可以用這個類來處理

HTTPError:是URLError的子類,主要包含三個屬性

Code:請求的狀態碼 reason:錯誤的原因 headers:響應的報頭

from urllib import request,errortry: response = request.urlopen('http://pythonsite.com/1111.html')except error.HTTPError as e: print(e.reason) print(e.code) print(e.headers)except error.URLError as e: print(e.reason)else: print('reqeust successfully')urllib.robotparse模塊

robotparse模塊主要負責處理爬蟲協議文件,robots.txt.的解析。

Robots協議(也稱為爬蟲協議、機器人協議等)的全稱是“網絡爬蟲排除標準”(Robots Exclusion Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取

網絡庫urllib3

urllib3是比urllib庫更強大的存在,目前已經有許多的原生系統已經開始使用urllib3。

urllib3具有如下優點:

支持HTTP和SOCKS代理 支持壓縮編碼 100%測試覆蓋率 具有鏈接池 線程安全 客戶端SLL/TLS驗證 協助處理重復請求和HTTP重定位 使用multipart編碼上傳文件

因為urllib3并不是Python的標準庫,所以我們使用之前,需要進行下載安裝,具體命令如下所示:

pip install urllib3#或conda install urllib3

下面,我們來講解urllib3庫的使用方式。

網絡請求GET請求

首先,在我們使用urllib3庫進行網絡請求時,需創建PoolManager類的實例,該類用于管理線程池。

下面,我們來通過urllib訪問百度,并返回查詢的結果,示例如下:

import urllib3http = urllib3.PoolManager()url = ’http://www.baidu.com/s’headers = { ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36’}response = http.request(’GET’, url, fields={’wd’: ’機器學習’}, headers=headers)result = response.data.decode(’UTF-8’)print(result)

運行之后,效果如下:

Python爬蟲中urllib3與urllib的區別是什么

這里,我們通過fields參數指定GET的請求字段。不過,這里先一步講解了請求頭,其實是百度有安全機制,讀者可以去掉headers參數試試。會返回百度的安全驗證頁面。

POST請求

如果需要向服務器提交表單或者比較復雜的數據,就需要使用到POST請求。POST請求比較簡單,僅僅只是將請求的第一個參數改為“POST”即可。

示例如下:

import urllib3http = urllib3.PoolManager()url = ’http://httpbin.org/post’headers = { ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36’}response = http.request(’POST’, url, fields={’username’: ’name’, ’age’: ’123456’}, headers=headers)result = response.data.decode(’UTF-8’)print(result)

運行之后,返回如下數據:

Python爬蟲中urllib3與urllib的區別是什么

HTTP響應頭

使用urllib3庫進行網絡訪問時,其返回的HTTPResponse。默認有一些攜帶的參數,其中就包括info方法。它能返回響應頭數據,示例如下:

import urllib3http = urllib3.PoolManager()url = ’http://www.baidu.com/s’headers = { ’User-Agent’: ’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36’}response = http.request(’POST’, url, fields={’wd’: ’機器學習’}, headers=headers)for key in response.info().keys(): print(’key:’,response.info()[key])

運行之后,返回的響應數據如下:

Python爬蟲中urllib3與urllib的區別是什么

上傳文件

首先,我們需要簡單的實現一個文件上傳的服務器代碼,這里我們使用Flask搭建一個簡單的服務器Python程序,代碼如下:

import flaskimport osUPLOAD_FILE = ’uploads’app = flask.Flask(__name__)@app.route(’/’, methods=[’POST’])def upload_file(): file = flask.request.files[’file’] if file:file.save(os.path.join(UPLOAD_FILE, os.path.basename(file.filename)))return ’文件上傳成功’ else:return ’文件上傳失敗’if __name__ == ’__main__’: app.run()

運行之后,它會一直等待客戶端上傳文件。

這個時候,我們再來實現urllib3是如何上傳文件的,示例如下:

import urllib3http = urllib3.PoolManager()with open(’1.jpg’, ’rb’) as f: fileData = f.read()url = ’http://127.0.0.1:5000’response = http.request(’POST’, url, fields={’file’: (’1.jpg’, fileData, ’image/jpeg’)})print(response.data.decode(’UTF-8’))

默認flask搭建的服務器,其接口為5000,也就是通過127.0.0.1:5000進行訪問。運行之后,就會在uploads文件夾下創建一個1.jpg的圖片。

同時,控制臺會輸出文件上傳成功,而服務器會返回狀態碼200。

這里,上傳文件就1一個鍵值對,其中file代表服務器上傳文件的字段。值的元組里,fileData為文件的二進制形式,’image/jpeg’代表上傳文件的格式(可以省略)。

超時處理

urllib3庫其HTTP的底層都是基于Socket實現的,而Socket超時又分為連接超時與讀超時。

其中,連接超時表示在連接的過程中,由于服務器的問題或域名弄錯了,而導致的無法連接的情況拋出的異常。

讀超時表示從服務器讀取數據時由于服務器的問題,導致長時間無法正常讀取數據而導致的異常。

通常,我們超時的設置有2種,一種是通過http.request(timeout)進行設置,一種是通過PoolManager()連接池進行設置。示例如下:

from urllib3 import *http = PoolManager(timeout=Timeout(connect=2.0, read=2.0))with open(’1.jpg’, ’rb’) as f: fileData = f.read()url = ’http://127.0.0.1:5000’try: response = http.request(’POST’, url, timeout=Timeout(connect=2.0, read=4.0)) print(response.data.decode(’UTF-8’))except Exception as e: print(e)

需要注意的是,通過連接池PoolManager進行設置的超時,是全局超時時間,哪怕你后邊的請求不設置,也是默認使用的這個超時。如果同時設置了request的超時,那么以request為準。

到此這篇關于Python爬蟲中urllib3與urllib的區別是什么的文章就介紹到這了,更多相關Python urllib3 urllib內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产欧美日韩亚州综合 | 国产精品一卡二| 欧美日韩网址| 欧美日韩一级黄| 亚洲色大成网站www久久九九| 国产一区二区三区综合| 影院欧美亚洲| 日韩精品一区二| 日本aⅴ亚洲精品中文乱码| 一区免费在线| 欧美大度的电影原声| 日本在线观看不卡视频| 在线观看福利一区| 日韩欧美综合一区| 蜜桃视频免费观看一区| 国产精品一区视频| 国产精品久久久99| 不卡av电影在线播放| 欧美另类高清zo欧美| 亚洲大型综合色站| 怡红院精品视频在线观看极品| 欧美一区二区三区色| 免费成人av资源网| 国产九区一区在线| 国产精品欧美久久久久无广告| 成人免费毛片高清视频| 欧美日韩亚洲高清一区二区| 亚洲国产成人porn| 亚洲免费精品| 国产精品青草综合久久久久99| bt欧美亚洲午夜电影天堂| 欧美在线一区二区三区| 一区二区三区中文字幕在线观看| 99在线热播精品免费| 69av一区二区三区| 热久久免费视频| 国产欧美日韩亚洲| 亚洲精品亚洲人成人网| 悠悠资源网久久精品| 国产日韩欧美在线一区| 成人丝袜高跟foot| 91麻豆精品国产自产在线观看一区| 午夜精品在线视频一区| 伊人久久大香线蕉av超碰演员| 国产色爱av资源综合区| 成人在线视频一区二区| 欧美理论电影在线| 蜜桃在线一区二区三区| 色综合久久99| 日韩高清欧美激情| 久久久精品国产一区二区三区| 一区二区在线观看不卡| 在线成人av| 亚洲欧美影音先锋| 亚洲高清av| 亚洲欧美aⅴ...| 国产精品日本欧美一区二区三区| 亚洲黄色性网站| 亚洲狼人精品一区二区三区| 一区二区三区国产精品| 国产精品久久久久久久久婷婷 | 亚洲男人的天堂av| 亚洲激情专区| 国产精品久久久久影视| 91久久中文| 亚洲无线码一区二区三区| 久久狠狠婷婷| 美女一区二区三区在线观看| 一本大道久久a久久精品综合| 亚洲一二三级电影| 麻豆成人小视频| 美女脱光内衣内裤视频久久网站 | 亚洲欧洲日产国码二区| 欧美日韩岛国| 久久九九久久九九| 欧美激情1区2区3区| 欧美国产综合色视频| 欧美精品观看| 亚洲欧美色图小说| 性欧美长视频| 麻豆精品久久精品色综合| 欧美日高清视频| 国产一二三精品| 日韩三级中文字幕| 99国产精品久久久久久久久久久| 久久嫩草精品久久久久| 91小宝寻花一区二区三区| 亚洲色图一区二区三区| 8x8x8国产精品| 亚洲精品一级| 国产精品综合一区二区| 亚洲日本在线a| 日韩色在线观看| 亚洲欧美99| 91浏览器打开| 精品一区二区成人精品| 亚洲手机成人高清视频| 69久久99精品久久久久婷婷| 亚洲巨乳在线| 9i在线看片成人免费| 日韩国产一区二| 国产精品热久久久久夜色精品三区 | 久久另类ts人妖一区二区| 成人h精品动漫一区二区三区| 亚洲一区二区影院| 久久精品人人做人人爽人人| 欧美伊人久久久久久久久影院| 黄色成人在线网址| 成人性生交大合| 三级久久三级久久久| 中文字幕精品一区| 精品视频在线免费观看| 日韩午夜在线| 99re热这里只有精品免费视频| 石原莉奈在线亚洲三区| 亚洲天堂成人在线观看| 91麻豆精品国产无毒不卡在线观看 | 欧美激情国产日韩| 久久精品国产亚洲一区二区三区 | 国产成人av在线影院| 日韩精品亚洲一区| 亚洲欧洲日产国码二区| 91精品国产综合久久久久久久久久 | 国产精品一区二区欧美| 91麻豆123| 成人夜色视频网站在线观看| 麻豆91免费观看| 亚洲成人资源网| 国产精品午夜电影| 欧美一区二区视频在线观看| 蜜桃av噜噜一区二区三区| 欧美日韩久久| 懂色av一区二区三区免费看| 日韩高清不卡一区二区| 国产精品福利av | 中文字幕在线视频一区| 欧美一区二区视频在线观看2020| 另类天堂av| 激情久久综合| 99视频在线精品| 裸体健美xxxx欧美裸体表演| 亚洲在线中文字幕| 欧美激情综合在线| 日韩欧美亚洲一区二区| 日本丶国产丶欧美色综合| 影音先锋久久资源网| 东方欧美亚洲色图在线| 日韩二区三区四区| 一区二区三区视频在线观看| 最新日韩av在线| 中文字幕 久热精品 视频在线| 精品久久久久久久久久久久久久久| 欧美日韩精品福利| 色激情天天射综合网| 亚洲女同在线| 亚洲欧美久久| 国产一区二区高清视频| 精品成人久久| 韩日午夜在线资源一区二区| 91最新地址在线播放| 波波电影院一区二区三区| 国产白丝精品91爽爽久久| 激情伊人五月天久久综合| 日本亚洲电影天堂| 青草av.久久免费一区| 香蕉乱码成人久久天堂爱免费| 亚洲日本中文字幕区| 中文字幕永久在线不卡| 中文字幕一区二区三区精华液 | 亚洲激情婷婷| 狠色狠色综合久久| 国内自拍亚洲| 国产精品多人| 黄色av一区| 99香蕉国产精品偷在线观看| 日韩午夜在线| 香蕉久久a毛片| 久久国产免费| 色综合久久天天| 在线视频一区二区免费| 欧美色涩在线第一页| 欧美欧美欧美欧美首页| 欧美一级片免费看| 欧美精品在线视频| 91精品综合久久久久久| 这里只有精品视频在线观看| 欧美成人在线直播| 国产日韩av一区| 亚洲欧洲日产国码二区| 一区二区三区波多野结衣在线观看| 亚洲乱码国产乱码精品精的特点 | 成人午夜精品在线| av电影在线观看不卡 | 欧美日韩日日夜夜| 日韩欧美精品在线视频| 国产亚洲一二三区| 综合亚洲深深色噜噜狠狠网站| 自拍偷在线精品自拍偷无码专区| 亚洲欧美日韩人成在线播放| 性做久久久久久免费观看欧美|