婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python爬蟲中urllib3與urllib的區別是什么

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

熱門標簽:旅游廁所地圖標注怎么弄 宿州電話機器人哪家好 南昌地圖標注 成都呼叫中心外呼系統哪家強 無錫智能外呼系統好用嗎 地圖標注與注銷 西青語音電銷機器人哪家好 電梯新時達系統外呼顯示e 百應電話機器人總部

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 request
response = request.urlopen(url='http://www.httpbin.org/get')
print(response.read().decode())

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

from urllib import request
response = request.urlopen(url='http://www.httpbin.org/post',
                           data=b'username=q123password=123')
print(response.read().decode())

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

from urllib import request
response = 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 request
headers ={
    'Referer': 'https://www.baidu.com/s?ie=utf-8f=3rsv_bp=1tn=baiduwd=python%20urllib%E5%BA%93oq=python%2520urllib%25E5%25BA%2593rsv_pq=947af0af001c94d0rsv_t=66135egC273yN5Uj589q%2FvA844PvH9087sbPe9ZJsjA8JA10Z2b3%2BtWMpworqlang=cnrsv_enter=0prefixsug=python%2520urllib%25E5%25BA%2593rsp=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 request
from 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 request
url ='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 parse
params = {'wd':'測試', 'code':1, 'height':188}
res = parse.urlencode(params)
print(res)

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

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

print(parse.parse_qs('wd=%E6%B5%8B%E8%AF%95code=1height=188'))

urllib.error模塊

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

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

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

  • Code:請求的狀態碼
  • reason:錯誤的原因
  • headers:響應的報頭
from urllib import request,error
try:
    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 urllib3

http = 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)

運行之后,效果如下:


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

POST請求

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

示例如下:

import urllib3

http = 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)

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

HTTP響應頭

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

import urllib3

http = 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])

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

上傳文件

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

import flask
import os

UPLOAD_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 urllib3

http = 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內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 關于python爬蟲應用urllib庫作用分析
  • python爬蟲Scrapy框架:媒體管道原理學習分析
  • python爬蟲Mitmproxy安裝使用學習筆記
  • Python爬蟲和反爬技術過程詳解
  • python爬蟲之Appium爬取手機App數據及模擬用戶手勢
  • 爬蟲Python驗證碼識別入門
  • Python爬蟲技術
  • Python爬蟲爬取商品失敗處理方法
  • Python獲取江蘇疫情實時數據及爬蟲分析
  • Python爬蟲之Scrapy環境搭建案例教程
  • 教你如何利用python3爬蟲爬取漫畫島-非人哉漫畫
  • Python爬蟲分析匯總

標簽:濰坊 西安 贛州 雅安 七臺河 許昌 渭南 辛集

巨人網絡通訊聲明:本文標題《Python爬蟲中urllib3與urllib的區別是什么》,本文關鍵詞  Python,爬蟲,中,urllib3,與,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python爬蟲中urllib3與urllib的區別是什么》相關的同類信息!
  • 本頁收集關于Python爬蟲中urllib3與urllib的區別是什么的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲电影你懂得| 久久久久久久一区| 国产福利91精品一区| 美女久久久精品| 青草av.久久免费一区| 日韩精品视频网| 日韩精品一二区| 在线精品视频小说1| 国产99久久久国产精品潘金 | 91精品国产乱码| 欧美一级搡bbbb搡bbbb| 日韩小视频在线观看专区| 欧美xxxx在线观看| 国产亚洲午夜高清国产拍精品| 欧美精品一区二区三区在线| 国产日韩欧美不卡在线| 日韩美女精品在线| 亚洲免费观看在线观看| 亚洲一区二区在线视频| 免费高清在线一区| 国产 欧美在线| 欧美亚洲动漫另类| 精品少妇一区二区三区在线播放| 久久精品一级爱片| 一区二区三区国产豹纹内裤在线| 日韩高清电影一区| 高清不卡在线观看| 精品视频在线免费看| 亚洲主播在线观看| 麻豆精品一区二区| 99久久精品国产精品久久| 在线播放欧美女士性生活| 精品日韩99亚洲| 亚洲天堂2016| 国产一区二区h| 在线观看精品一区| 久久这里只有精品6| 一区二区在线免费| 国产精品1024久久| 欧美日韩精品二区第二页| 国产亚洲自拍一区| 欧美aⅴ一区二区三区视频| 成人免费视频国产在线观看| 欧美人与禽zozo性伦| 中国av一区二区三区| 久久精品国产久精国产| 在线观看免费一区| 1024精品合集| 经典一区二区三区| 欧美美女视频在线观看| 国产精品成人免费精品自在线观看| 日本少妇一区二区| 在线观看欧美精品| 国产精品传媒在线| 国产最新精品精品你懂的| 欧美伦理影视网| 亚洲综合一区在线| 成人久久18免费网站麻豆| 日韩免费看的电影| 日韩国产在线观看| 欧美日韩另类一区| 午夜欧美视频在线观看| 日本高清不卡aⅴ免费网站| 国产精品久久久久7777按摩| 久草中文综合在线| 欧美成人一级视频| 丝袜脚交一区二区| 91精选在线观看| 午夜精品福利在线| 欧美精品久久99| 午夜欧美电影在线观看| 欧美剧情片在线观看| 亚洲国产美女搞黄色| 欧美日韩mp4| 蜜臀va亚洲va欧美va天堂| 91麻豆精品国产91久久久资源速度| 午夜影视日本亚洲欧洲精品| 欧美日韩在线亚洲一区蜜芽| 亚洲国产cao| 欧美一区二区三区在线观看视频| 天堂影院一区二区| 欧美一级欧美三级在线观看| 免费黄网站欧美| 久久久久国产精品人| 国产91露脸合集magnet| 1区2区3区欧美| 在线精品视频一区二区三四| 日韩制服丝袜av| 精品成人a区在线观看| 国产成人免费在线观看| 亚洲免费视频中文字幕| 欧美日韩久久久久久| 久久99精品国产麻豆婷婷 | 日韩美女视频在线| 国产精品一区二区在线看| 国产精品女同互慰在线看| aaa欧美日韩| 三级在线观看一区二区| www久久精品| 91久久一区二区| 免费成人av资源网| 国产精品欧美一级免费| 精品污污网站免费看| 国产酒店精品激情| 亚洲一区二区三区视频在线| 欧美一区二区女人| www.亚洲在线| 蜜桃av一区二区三区| 国产精品素人一区二区| 欧美精品久久一区二区三区| 国产精品资源在线看| 一区二区三区精品视频在线| 91精品欧美久久久久久动漫| 不卡视频在线观看| 日本亚洲免费观看| 亚洲精品午夜久久久| 欧美一级片在线看| 欧美综合在线视频| 成人免费毛片a| 美女视频第一区二区三区免费观看网站 | 精品国产伦一区二区三区观看方式 | 午夜精品久久久久久久| 久久久.com| 日韩一区二区在线看| 91蜜桃免费观看视频| 国产酒店精品激情| 精品在线播放午夜| 日日摸夜夜添夜夜添精品视频| 国产精品久久久久aaaa樱花| xnxx国产精品| 欧美一区二区三区四区久久 | 亚洲不卡av一区二区三区| 国产精品私人影院| 久久久久国产一区二区三区四区| 欧美日韩和欧美的一区二区| 99久久99久久精品国产片果冻| 国产一区二区中文字幕| 麻豆一区二区三区| 毛片av中文字幕一区二区| 亚洲h在线观看| 一区二区三区欧美视频| 国产精品久久久久久久久快鸭| 久久久99精品免费观看| 久久先锋影音av| 久久久美女艺术照精彩视频福利播放| 91精品国产综合久久久久久久久久| 欧美视频在线观看一区二区| 一本高清dvd不卡在线观看| 成人精品一区二区三区四区| 成人综合婷婷国产精品久久| 大尺度一区二区| 高清不卡在线观看av| 99免费精品在线观看| 日本乱人伦aⅴ精品| 日本韩国欧美国产| 欧美高清hd18日本| 91精品国产一区二区三区香蕉| 欧美美女一区二区三区| 日韩一级完整毛片| 久久精品综合网| 国产精品麻豆视频| 亚洲制服丝袜av| 日韩va欧美va亚洲va久久| 久久国产精品露脸对白| 国产高清精品在线| 91精品福利视频| 欧美一区二区三级| 欧美激情自拍偷拍| 亚洲成精国产精品女| 乱中年女人伦av一区二区| 国产精品资源网站| 欧美最新大片在线看| 日韩精品专区在线影院重磅| 国产欧美一区二区三区鸳鸯浴 | 国产一二精品视频| 99re这里都是精品| 欧美视频第二页| 久久精品人人爽人人爽| 亚洲色图在线看| 免费xxxx性欧美18vr| caoporn国产精品| 欧美一区二区日韩| 国产精品久久久久久妇女6080| 亚洲va韩国va欧美va| 国产成人av福利| 欧美精品99久久久**| 国产区在线观看成人精品| 香蕉久久一区二区不卡无毒影院| 国产精品白丝jk黑袜喷水| 91国偷自产一区二区开放时间| 欧美一区二区三区免费视频| 国产精品久久久久久久久免费桃花 | 日韩一级黄色片| 日韩久久一区二区| 精品无人码麻豆乱码1区2区| 欧美天天综合网| 欧美激情一区在线| 激情伊人五月天久久综合| 91黄色激情网站| 国产精品超碰97尤物18|