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

Python2/3中urllib庫(kù)的一些常見(jiàn)用法

 更新時(shí)間:2017年12月19日 10:16:27   作者:sherlockChen  
Urllib庫(kù)是Python中的一個(gè)功能強(qiáng)大、用于操作URL,并在做爬蟲的時(shí)候經(jīng)常要用到的庫(kù)。下面這篇文章主要給大家介紹了關(guān)于Python2/3中urllib庫(kù)的一些常見(jiàn)用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。

什么是Urllib庫(kù)

Urllib是Python提供的一個(gè)用于操作URL的模塊,我們爬取網(wǎng)頁(yè)的時(shí)候,經(jīng)常需要用到這個(gè)庫(kù)。

升級(jí)合并后,模塊中的包的位置變化的地方較多。

urllib庫(kù)對(duì)照速查表

Python2.X

Python3.X

urllib

urllib.request, urllib.error, urllib.parse

urllib2

urllib.request, urllib.error

urllib2.urlopen

urllib.request.urlopen

urllib.urlencode

urllib.parse.urlencode

urllib.quote

urllib.request.quote

urllib2.Request

urllib.request.Request

urlparse

urllib.parse

urllib.urlretrieve

urllib.request.urlretrieve

urllib2.URLError

urllib.error.URLError

cookielib.CookieJar

http.CookieJar

urllib庫(kù)是用于操作URL,爬取頁(yè)面的python第三方庫(kù),同樣的庫(kù)還有requests、httplib2

在Python2.X中,分urllib和urllib2,但在Python3.X中,都統(tǒng)一合并到urllib中。通過(guò)上表可以看到其中常見(jiàn)的變動(dòng),依據(jù)該變動(dòng)可快速寫出相應(yīng)版本的python程序。

相對(duì)來(lái)說(shuō),Python3.X對(duì)中文的支持比Python2.X友好,所以該博客接下來(lái)通過(guò)Python3.X來(lái)介紹urllib庫(kù)的一些常見(jiàn)用法。

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

import urllib.request
r = urllib.request.urlopen(http://www.python.org/)

首先導(dǎo)入urllib.request模塊,使用urlopen()對(duì)參數(shù)中的URL發(fā)送請(qǐng)求,返回一個(gè)http.client.HTTPResponse對(duì)象。

urlopen()中,使用timeout字段,可設(shè)定相應(yīng)的秒數(shù)時(shí)間之后停止等待響應(yīng)。除此之外,還可使用r.info() r.getcode() 、r.geturl()獲取相應(yīng)的當(dāng)前環(huán)境信息、狀態(tài)碼、當(dāng)前網(wǎng)頁(yè)URL。

讀取響應(yīng)內(nèi)容

import urllib.request
url = "http://www.python.org/"
with urllib.request.urlopen(url) as r:
 r.read()

使用r.read()讀取響應(yīng)內(nèi)容到內(nèi)存,該內(nèi)容為網(wǎng)頁(yè)的源代碼(可用相應(yīng)的瀏覽器“查看網(wǎng)頁(yè)源代碼”功能看到),并可對(duì)返回的字符串進(jìn)行相應(yīng)解碼decode() 。

傳遞URL參數(shù)

import urllib.request
import urllib.parse
params = urllib.parse.urlencode({'q': 'urllib', 'check_keywords': 'yes', 'area': 'default'})
url = "https://docs.python.org/3/search.html?{}".format(params)
r = urllib.request.urlopen(url)

以字符串字典的形式,通過(guò)urlencode()編碼,為URL的查詢字符串傳遞數(shù)據(jù),

編碼后的params為字符串,字典每項(xiàng)鍵值對(duì)以'&'連接:'q=urllib&check_keywords=yes&area=default'

構(gòu)建后的URL:https://docs.python.org/3/search.html?q=urllib&check_keywords=yes&area=default

當(dāng)然,urlopen()支持直接構(gòu)建的URL,簡(jiǎn)單的get請(qǐng)求可以不通過(guò)urlencode()編碼,手動(dòng)構(gòu)建后直接請(qǐng)求。上述方法使代碼模塊化,更優(yōu)雅。

傳遞中文參數(shù)

import urllib.request
searchword = urllib.request.quote(input("請(qǐng)輸入要查詢的關(guān)鍵字:"))
url = "https://cn.bing.com/images/async?q={}&first=0&mmasync=1".format(searchword)
r = urllib.request.urlopen(url)

該URL是利用bing圖片接口,查詢關(guān)鍵字q的圖片。如果直接將中文傳入U(xiǎn)RL中請(qǐng)求,會(huì)導(dǎo)致編碼錯(cuò)誤。我們需要使用quote() ,對(duì)該中文關(guān)鍵字進(jìn)行URL編碼,相應(yīng)的可以使用unquote()進(jìn)行解碼。

定制請(qǐng)求頭

import urllib.request
url = 'https://docs.python.org/3/library/urllib.request.html'
headers = {
 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
 'Referer': 'https://docs.python.org/3/library/urllib.html'
}
req = urllib.request.Request(url, headers=headers)
r = urllib.request.urlopen(req)

有時(shí)爬取一些網(wǎng)頁(yè)時(shí),會(huì)出現(xiàn)403錯(cuò)誤(Forbidden),即禁止訪問(wèn)。這是因?yàn)榫W(wǎng)站服務(wù)器對(duì)訪問(wèn)者的Headers屬性進(jìn)行身份驗(yàn)證,例如:通過(guò)urllib庫(kù)發(fā)送的請(qǐng)求,默認(rèn)以”Python-urllib/X.Y”作為User-Agent,其中X為Python的主版本號(hào),Y為副版本號(hào)。所以,我們需要通過(guò)urllib.request.Request()構(gòu)建Request對(duì)象,傳入字典形式的Headers屬性,模擬瀏覽器。

相應(yīng)的Headers信息,可通過(guò)瀏覽器的開(kāi)發(fā)者調(diào)試工具,”檢查“功能的”Network“標(biāo)簽查看相應(yīng)的網(wǎng)頁(yè)得到,或使用抓包分析軟件Fiddler、Wireshark。

除上述方法外,還可以使用urllib.request.build_opener()req.add_header()定制請(qǐng)求頭,詳見(jiàn)官方樣例。

在Python2.X中,urllib模塊和urllib2模塊通常一起使用,因?yàn)?code>urllib.urlencode()可以對(duì)URL參數(shù)進(jìn)行編碼,而urllib2.Request()可以構(gòu)建Request對(duì)象,定制請(qǐng)求頭,然后統(tǒng)一使用urllib2.urlopen()發(fā)送請(qǐng)求。

傳遞POST請(qǐng)求

import urllib.request
import urllib.parse
url = 'https://passport.cnblogs.com/user/signin?'
post = {
 'username': 'xxx',
 'password': 'xxxx'
}
postdata = urllib.parse.urlencode(post).encode('utf-8')
req = urllib.request.Request(url, postdata)
r = urllib.request.urlopen(req)

我們?cè)谶M(jìn)行注冊(cè)、登錄等操作時(shí),會(huì)通過(guò)POST表單傳遞信息。

這時(shí),我們需要分析頁(yè)面結(jié)構(gòu),構(gòu)建表單數(shù)據(jù)post,使用urlencode()進(jìn)行編碼處理,返回字符串,再指定'utf-8'的編碼格式,這是因?yàn)镻OSTdata只能是bytes或著file object。最后通過(guò)Request()對(duì)象傳遞postdata,使用urlopen()發(fā)送請(qǐng)求。

下載遠(yuǎn)程數(shù)據(jù)到本地

import urllib.request
url = "https://www.python.org/static/img/python-logo.png"
urllib.request.urlretrieve(url, "python-logo.png")

爬取圖片、視頻等遠(yuǎn)程數(shù)據(jù)時(shí),可使用urlretrieve()下載到本地。

第一個(gè)參數(shù)為要下載的url,第二個(gè)參數(shù)為下載后的存放路徑。

該樣例下載python官網(wǎng)logo到當(dāng)前目錄下,返回元組(filename, headers)。

設(shè)置代理IP

import urllib.request
url = "https://www.cnblogs.com/"
proxy_ip = "180.106.16.132:8118"
proxy = urllib.request.ProxyHandler({'http': proxy_ip})
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
r = urllib.request.urlopen(url)

有時(shí)頻繁的爬取一個(gè)網(wǎng)頁(yè),會(huì)被網(wǎng)站服務(wù)器屏蔽IP。這時(shí),可通過(guò)上述方法設(shè)置代理IP。

首先,通過(guò)網(wǎng)上代理IP的網(wǎng)站找一個(gè)可以用的IP,構(gòu)建ProxyHandler()對(duì)象,將'http'和代理IP以字典形式作為參數(shù)傳入,設(shè)置代理服務(wù)器信息。再構(gòu)建opener對(duì)象,將proxy和HTTPHandler類傳入。通過(guò)installl_opener()將opener設(shè)置成全局,當(dāng)用urlopen()發(fā)送請(qǐng)求時(shí),會(huì)使用之前設(shè)置的信息來(lái)發(fā)送相應(yīng)的請(qǐng)求。

異常處理

import urllib.request
import urllib.error
url = "http://www.balabalabala.org"
try:
 r = urllib.request.urlopen(url)
except urllib.error.URLError as e:
 if hasattr(e, 'code'):
  print(e.code)
 if hasattr(e, 'reason'):
  print(e.reason)

可以使用URLError類,處理一些URL相關(guān)異常。導(dǎo)入urllib.error,捕獲URLError異常后,因?yàn)橹挥邪l(fā)生HTTPError異常(URLError子類)時(shí),才會(huì)有異常狀態(tài)碼e.code,所以需要判斷異常是否有屬性code。

Cookie的使用

import urllib.request
import http.cookiejar
url = "http://www.balabalabala.org/"
cjar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
urllib.request.install_opener(opener)
r = urllib.request.urlopen(url)

通過(guò)無(wú)狀態(tài)協(xié)議HTTP訪問(wèn)網(wǎng)頁(yè)時(shí),Cookie維持會(huì)話間的狀態(tài)。例如:有些網(wǎng)站需要登錄操作,第一次可通過(guò)提交POST表單來(lái)登錄,當(dāng)爬取該網(wǎng)站下的其它站點(diǎn)時(shí),可以使用Cookie來(lái)保持登錄狀態(tài),而不用每次都通過(guò)提交表單來(lái)登錄。

首先,構(gòu)建CookieJar()對(duì)象cjar,再使用HTTPCookieProcessor()處理器,處理cjar,并通過(guò)build_opener()構(gòu)建opener對(duì)象,設(shè)置成全局,通過(guò)urlopen()發(fā)送請(qǐng)求。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 自學(xué)python用什么系統(tǒng)好

    自學(xué)python用什么系統(tǒng)好

    在本篇文章里小編給大家整理了一篇關(guān)于學(xué)python用什么系統(tǒng)好的相關(guān)文章,有興趣的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • 在Python中操作時(shí)間之mktime()方法的使用教程

    在Python中操作時(shí)間之mktime()方法的使用教程

    這篇文章主要介紹了在Python中操作時(shí)間之mktime()方法的使用教程,是Python入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 一文詳解Python的pyc文件

    一文詳解Python的pyc文件

    Python?程序在執(zhí)行過(guò)程中,會(huì)產(chǎn)生一些中間文件,其中最常見(jiàn)的就是?pyc?文件,pyc?文件是?Python?的二進(jìn)制字節(jié)碼文件,本文將通過(guò)簡(jiǎn)潔的語(yǔ)言、實(shí)際的代碼和案例,通俗易懂地解釋?pyc?文件的相關(guān)知識(shí),感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-12-12
  • python導(dǎo)出mysql指定binlog文件實(shí)現(xiàn)demo

    python導(dǎo)出mysql指定binlog文件實(shí)現(xiàn)demo

    這篇文章主要介紹了python導(dǎo)出mysql指定binlog文件實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型)

    PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型)

    這篇文章主要介紹了PyTorch 遷移學(xué)習(xí)實(shí)踐(幾分鐘即可訓(xùn)練好自己的模型),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python讀取mat文件中的struct問(wèn)題

    python讀取mat文件中的struct問(wèn)題

    這篇文章主要介紹了python讀取mat文件中的struct問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框示例

    Python wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框示例

    這篇文章主要介紹了Python wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框,結(jié)合實(shí)例形式分析了wxPython庫(kù)使用wx.ListBox創(chuàng)建列表框的簡(jiǎn)單實(shí)現(xiàn)方法及ListBox函數(shù)相關(guān)選項(xiàng)的功能,需要的朋友可以參考下
    2018-09-09
  • Python實(shí)現(xiàn)批量添加視頻文本水印

    Python實(shí)現(xiàn)批量添加視頻文本水印

    這篇文章主要為大家詳細(xì)介紹了如何基于PyQt5開(kāi)發(fā)一個(gè)視頻水印批量添加工具,旨在為多個(gè)視頻文件添加文本水印,感興趣的小伙伴可以參考一下
    2025-02-02
  • python實(shí)現(xiàn)的web監(jiān)控系統(tǒng)

    python實(shí)現(xiàn)的web監(jiān)控系統(tǒng)

    這篇文章主要介紹了python實(shí)現(xiàn)的web監(jiān)控系統(tǒng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python裝飾器知識(shí)點(diǎn)補(bǔ)充

    Python裝飾器知識(shí)點(diǎn)補(bǔ)充

    本篇文章給大家補(bǔ)充了關(guān)于Python裝飾器的相關(guān)知識(shí)點(diǎn)內(nèi)容,大家可以跟著學(xué)習(xí)參考下。
    2018-05-05

最新評(píng)論

金沙县| 绥中县| 盐边县| 胶南市| 镇雄县| 肃宁县| 洛阳市| 仁布县| 樟树市| 屏南县| 阜新市| 阜宁县| 舒城县| 大港区| 福贡县| 交城县| 永福县| 铅山县| 长宁区| 察隅县| 井陉县| 怀化市| 南丹县| 大名县| 太谷县| 宝丰县| 毕节市| 静宁县| 自治县| 九台市| 灵台县| 茶陵县| 开平市| 同德县| 开原市| 宾川县| 甘肃省| 北流市| 红原县| 顺昌县| 长武县|