最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲(chóng)請(qǐng)求頁(yè)面urllib庫(kù)詳解

 更新時(shí)間:2023年07月07日 10:08:25   作者:milk-request  
這篇文章主要介紹了python爬蟲(chóng)請(qǐng)求頁(yè)面urllib庫(kù)詳解,python3將urllib和urllib2模塊整合并命名為urllib模塊,urllib模塊有多個(gè)子模塊,各有不同的功能,需要的朋友可以參考下

基本庫(kù)urllib

學(xué)習(xí)爬蟲(chóng),最初的操作便是模擬瀏覽器向服務(wù)端發(fā)出請(qǐng)求,這里我們就學(xué)習(xí)使用urlib庫(kù)的用法

使用urllib

首先,我們需要了解urllib庫(kù),它是python內(nèi)置的HTTP請(qǐng)求庫(kù),也就是說(shuō)不需要額外安裝即可使用,它包含4個(gè)模塊

  • request:它是最基本的HTTP請(qǐng)求模塊,可以用來(lái)模擬發(fā)送請(qǐng)求。
  • error:異常處理模塊。
  • parse:一個(gè)工具模塊,提供了許多URL處理方法。
  • robotparser:主要時(shí)用來(lái)識(shí)別網(wǎng)站的robot.txt文件然后判斷那些網(wǎng)站是否可以爬。

發(fā)送請(qǐng)求

urllib.request模塊提供了最基本的構(gòu)造HTTP請(qǐng)求的方法,urllib.request.urlopen(),若在獲取請(qǐng)求對(duì)象時(shí),不需要過(guò)多的參數(shù)傳遞,可以直接選擇urllib.request.urlopen();

如果需要加入Headers等信息請(qǐng)求則使用urllib.request.Request()。

1.urlopen()

這里我們以www.baidu.com為例,把這個(gè)網(wǎng)頁(yè)抓取下來(lái). 代碼如下:

import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))

添加data(附加數(shù)據(jù))參數(shù)

data參數(shù)是可選的。如果要添加該參數(shù),需要使用bytes()方法將參數(shù)轉(zhuǎn)化為bytes類(lèi)型。

另外,如果傳遞了這個(gè)參數(shù),則它的請(qǐng)求方式就不再是GET方式,而是POST方式。

實(shí)例:

import urllib.request
import urllib.parse
data = bytes(urllib.parse.urlencode({'word': 'hello'}), encoding='utf-8')
response = urllib.request.urlopen('http://httpbin.org/post', data=data)
print(response.read())

我們傳遞的參數(shù)出現(xiàn)在了form字段中,這表明是模擬了以表單提交的方式,以POST方式傳輸數(shù)據(jù),這里的 //httpbin.org是一個(gè)提供HTTP請(qǐng)求測(cè)試的站點(diǎn)。

添加timeout(超時(shí)時(shí)間)參數(shù)

timeout參數(shù)用于設(shè)置超時(shí)時(shí)間,單位為s,如果請(qǐng)求超出了設(shè)置的這個(gè)時(shí)間還未響應(yīng),就會(huì)拋出異常。 實(shí)例:

import urllib.request
response = urllib.request.urlopen('http://httpbin.org/post', timeout=1)
print(response.read())

在爬取頁(yè)面的過(guò)程中,若一個(gè)頁(yè)面長(zhǎng)時(shí)間無(wú)法響應(yīng)將導(dǎo)致后續(xù)工作無(wú)法進(jìn)行,所以設(shè)置timeout超時(shí)時(shí)間很有必要。

urllib.request官方文檔

2.Request()

實(shí)例:

import urllib.request
request = urllib.request.Request('https://www.baidu.com')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

Request的構(gòu)造方法如下:

class urllib.request.Request(url,date=None,headers={},origin_req_host=None,unverifiable=False,method=None)

Request參數(shù)

  • url 第一個(gè)參數(shù),必傳參數(shù),其他都是可選參數(shù)。
  • data 第二個(gè)參數(shù),如果要傳,必須傳bytes類(lèi)型,如果是字典可先用urllib.parse模快里的urlencode()編碼。
  • headers 第三個(gè)參數(shù),可以在構(gòu)造請(qǐng)求時(shí)通過(guò)header參數(shù)直接構(gòu)造,也可通過(guò)調(diào)用請(qǐng)求實(shí)例的add_header()方法添加。
  • origin_req_host 第四個(gè)參數(shù)指的是請(qǐng)求方的host名稱(chēng)或IP地址。
  • unverifiable 第五個(gè)參數(shù)表示這個(gè)請(qǐng)求時(shí)否時(shí)無(wú)法驗(yàn)證的默認(rèn)時(shí)False,意思就是說(shuō)用戶(hù)沒(méi)有足夠的權(quán)限來(lái)選擇接收這個(gè)請(qǐng)求的結(jié)果。
  • methon 第六個(gè)參數(shù)是一個(gè)字符串,指示請(qǐng)求使用的方法,比如GET POST和PUT等。

多參數(shù)實(shí)例:

import urllib.request
import urllib.parse
url = 'http://httpbin.org/post'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
                  'Host':'httpbin.org'
}
dict = {
    'name': 'zhangsan'
}
data = bytes(urllib.parse.urlencode(dict), encoding='utf-8')
request = urllib.request.Request(url, data=data, headers=headers, method='POST')
response = urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

高級(jí)用法

1.驗(yàn)證

出現(xiàn)情景:有些網(wǎng)站在打開(kāi)時(shí)就會(huì)彈出提示框,提示你輸入用戶(hù)名和密碼,驗(yàn)證成功后才能查看頁(yè)面,如果要請(qǐng)求這樣的頁(yè)面,該怎么辦呢?借助HTTPBasicAuthHandler就可以完成。 代碼如下:

from urllib.request import HTTPPasswordMgrWithDefaultRealm,HTTPBasicAuthHandler,build_opener
from urllib.error import URLError
username = '用戶(hù)名'
password = '密碼'
url = '你要請(qǐng)求的url'
#構(gòu)建一個(gè)密碼管理對(duì)象,用來(lái)保存需要處理的用戶(hù)名和密碼
passwdmgr = HTTPPasswordMgrWithDefaultRealm()
# 添加賬戶(hù)信息,第一個(gè)參數(shù)realm是與遠(yuǎn)程服務(wù)器相關(guān)的域信息,一般沒(méi)人管它都是寫(xiě)None,后面三個(gè)參數(shù)分別是 代理服務(wù)器、用戶(hù)名、密碼
passwdmgr.add_password(None, url , username, password)
auth_handler = HTTPBasicAuthHandler(passwdmgr)
opener = build_opener(auth_handler)
try:
   result = opener.open(url)
   html = result.read().decode('utf-8)
   print(html)
except URLError as e:
   print(e.reason)

2.代理

添加代理

from urllib.error import URLError
from urllib.request import ProxyHandler, build_opener
proxy_handler = ProxyHandler({
    'http': 'http://127.0.0.1:9743',
    'https': 'http://127.0.0.1:9743'
})
opener = build_opener(proxy_handler)
try:
    response = opener.open('https://www.baidu.com')
    print(response.read().decode('utf-8'))
except URLError as e:
    print(e.reason)

3.Cookies

從網(wǎng)站中獲取Cookies

代碼:

import http.cookiejar
import urllib.request
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
for item in cookie:
    print(item.name + "=" + item.value)

為什么要獲取Cookies?

維持同一個(gè)對(duì)話(huà)。例如:你用post方式登入了某個(gè)網(wǎng)站,又使用了get方式來(lái)獲取網(wǎng)站個(gè)人頁(yè)面信息,這相當(dāng)于打開(kāi)了兩個(gè)瀏覽器,是兩個(gè)會(huì)話(huà),不能成功獲取個(gè)人信息。所以可以在get方式添加cookies參數(shù)來(lái)維持對(duì)話(huà)。

保存Cookies

將CookieJar換成MozillaCookieJar,它在生成文件時(shí)會(huì)用到,是CookieJar的子類(lèi),用來(lái)處理Cookie和文件相關(guān)的事件。 代碼:

import http.cookiejar
import urllib.request
filename = 'cookies.txt'
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

運(yùn)行之后,可以發(fā)現(xiàn)項(xiàng)目文件夾中生成了一個(gè)cookies.txt文件,另外LWPCookieJar可以保存LWP格式的Cookies文件。

如果想獲取更多高級(jí)用法,可查看官方文檔

處理異常

為何要處理異常? 在請(qǐng)求過(guò)程中,可能會(huì)出現(xiàn)多種多樣的錯(cuò)誤,如果 爬取多個(gè)頁(yè)面,其中一個(gè)頁(yè)面出現(xiàn)錯(cuò)誤會(huì)使程序報(bào)錯(cuò)而終止運(yùn)行,所以異常處理是十分有必要的。這里我們學(xué)習(xí)處理HTTP請(qǐng)求錯(cuò)誤異常。

HTTPError

屬性:
code:返回HTTP狀態(tài)碼
reason:返回錯(cuò)誤原因
headers:返回請(qǐng)求頭

實(shí)例:

import urllib.error
import urllib.request
try:
    response = urllib.request.urlopen('https://www.baidu.com', timeout=0.01)
except urllib.error.HTTPError as e:
    print(e.reason, e.code, e.headers, sep='\n')

這里為了實(shí)現(xiàn)異常將超時(shí)間設(shè)置為0.01,拋出了time out異常。

解析鏈接

為什么要解析鏈接?

當(dāng)你在爬取網(wǎng)頁(yè)時(shí),可能會(huì)需要搜索此網(wǎng)頁(yè)的其他信息。這時(shí)就需要解析鏈接,構(gòu)造鏈接。

URL由6個(gè)部分構(gòu)成: (://)符號(hào)前的是協(xié)議scheme,第一個(gè)/符號(hào)前是域名netloc,后面是path路徑,分號(hào)(;)后面是參數(shù)params,問(wèn)號(hào)(?)后面是查詢(xún)條件query,一般用作GET類(lèi)型的URL,井號(hào)(#)后面是錨點(diǎn),用于直接定位頁(yè)面內(nèi)部下拉位置。

標(biāo)準(zhǔn)鏈接格式: scheme://netloc/path;params?query#fragment

urlparse()

該方法可以實(shí)現(xiàn)URL的識(shí)別和分段

參數(shù)
urlstring:這是必填項(xiàng)。待解析的URL。
scheme:默認(rèn)協(xié)議。
allow_fragments:是否忽略fragment。如果被設(shè)置為False,fragment部分就會(huì)被忽略,被解析為path,parameters,query的一部分。

實(shí)例:

from urllib.parse import urlparse
result = urlparse('https://docs.python.org/3/library/urllib.request.html#urllib.request.OpenerDirector')
print(type(result), result)

對(duì)url進(jìn)行解析的各種方法官方文檔

到此這篇關(guān)于python爬蟲(chóng)請(qǐng)求頁(yè)面urlib庫(kù)詳解的文章就介紹到這了,更多相關(guān)python爬蟲(chóng)urlib庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python反反爬蟲(chóng)技術(shù)限制連續(xù)請(qǐng)求時(shí)間處理

    python反反爬蟲(chóng)技術(shù)限制連續(xù)請(qǐng)求時(shí)間處理

    這篇文章主要為大家介紹了python反反爬蟲(chóng)技術(shù)限制連續(xù)請(qǐng)求時(shí)間處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python實(shí)現(xiàn)對(duì)比Word文檔差異的三種方式小結(jié)

    Python實(shí)現(xiàn)對(duì)比Word文檔差異的三種方式小結(jié)

    在日常工作中,Word 文檔對(duì)比功能就尤為重要,這篇文章主要來(lái)和大家探討如何使用?Python 實(shí)現(xiàn)對(duì)比 Word 文檔差異,感興趣的小伙伴可以了解下
    2025-08-08
  • matlab繪制局部放大圖圖文教程

    matlab繪制局部放大圖圖文教程

    這篇文章主要給大家介紹了關(guān)于matlab繪制局部放大圖的相關(guān)資料,所謂局部放大即呈現(xiàn)子圖,以顯示局部細(xì)節(jié),需要的朋友可以參考下
    2023-07-07
  • Window10下python3.7 安裝與卸載教程圖解

    Window10下python3.7 安裝與卸載教程圖解

    本文通過(guò)圖文并茂的形式給大家介紹了WINDOW10下PYTHON3.7 安裝與卸載,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Django學(xué)習(xí)筆記之為Model添加Action

    Django學(xué)習(xí)筆記之為Model添加Action

    這篇文章主要介紹了Django給admin添加Action,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-04-04
  • python裝飾器原理源碼示例分析

    python裝飾器原理源碼示例分析

    本文由淺入深介紹了python的裝飾器,并且通過(guò)代碼展現(xiàn)了如何自己手寫(xiě)裝飾器函數(shù)和類(lèi)裝飾器,有需要的朋友可以參考下,希望可以有所幫助
    2021-09-09
  • Python?Django教程之實(shí)現(xiàn)新聞應(yīng)用程序

    Python?Django教程之實(shí)現(xiàn)新聞應(yīng)用程序

    Django是一個(gè)用Python編寫(xiě)的高級(jí)框架,它允許我們創(chuàng)建服務(wù)器端Web應(yīng)用程序。在本文中,我們將了解如何使用Django創(chuàng)建新聞應(yīng)用程序,感興趣的可以嘗試一下
    2022-10-10
  • Python2.x和3.x下maketrans與translate函數(shù)使用上的不同

    Python2.x和3.x下maketrans與translate函數(shù)使用上的不同

    這篇文章主要介紹了Python2.x和3.x下maketrans與translate函數(shù)使用上的不同,這兩個(gè)函數(shù)建立映射來(lái)替換內(nèi)容是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-04-04
  • Python使用BeautifulSoup進(jìn)行XPath和CSS選擇器定位

    Python使用BeautifulSoup進(jìn)行XPath和CSS選擇器定位

    在 Python 中,BeautifulSoup 是一個(gè)常用的 HTML 和 XML 解析庫(kù),它允許我們輕松地定位和提取網(wǎng)頁(yè)中的特定元素,本文將詳細(xì)介紹如何在 BeautifulSoup 中使用 XPath 和 CSS 選擇器定位 HTML 元素,并提供示例代碼以幫助新手理解這些概念,需要的朋友可以參考下
    2024-11-11
  • Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例

    Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例

    今天小編就為大家分享一篇Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論

民和| 威远县| 慈溪市| 徐水县| 永兴县| 石景山区| 城市| 奉贤区| 邵武市| 井冈山市| 同江市| 大城县| 永清县| 朝阳区| 怀来县| 行唐县| 台东县| 景泰县| 阿拉尔市| 吉木萨尔县| 宜都市| 岢岚县| 洱源县| 溆浦县| 辽阳县| 高雄县| 兰溪市| 屏边| 恩施市| 买车| 濮阳市| 曲水县| 淳安县| 大足县| 深泽县| 新野县| 昆明市| 赣榆县| 渭南市| 无锡市| 沂南县|