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

python爬蟲之urllib庫(kù)常用方法用法總結(jié)大全

 更新時(shí)間:2018年11月14日 15:31:43   作者:summer哥  
urllib是python自帶的請(qǐng)求庫(kù),各種功能相比較之下也是比較完備的,下面這篇文章主要給大家介紹了關(guān)于python爬蟲之urllib庫(kù)常用方法用法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

Urllib

官方文檔地址:https://docs.python.org/3/library/urllib.html

urllib提供了一系列用于操作URL的功能。

本文主要介紹的是關(guān)于python urllib庫(kù)常用方法用法的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧

1、讀取cookies

import http.cookiejar as cj,urllib.request as request

cookie = cj.CookieJar()
handler = request.HTTPCookieProcessor(cookie)

opener = request.build_opener(handler)
response = opener.open('http://www.bigdata17.com')

for item in cookie:
 print(item.name + "=" + item.value)

2、將cookies保存在文件中

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

3、處理異常

URLError和HTTPError類,兩個(gè)類是父子關(guān)系,HTTPError會(huì)返回錯(cuò)誤代碼,兩個(gè)類都可以處理request模塊產(chǎn)生的異常,這兩個(gè)都有一個(gè)reason屬性,用于記錄出現(xiàn)異常的原因
URLError處理異常:

from urllib import request,error

try:
 response = request.urlopen('http://www.bigdata17.com/index.htm')
except error.URLError as e:
 print(e.reason)

HTTPError處理異常:

這個(gè)類是專門處理http請(qǐng)求的異常,http請(qǐng)求會(huì)返回一個(gè)請(qǐng)求代碼,因此HTTPError會(huì)有一個(gè)code屬性。另外HTTP請(qǐng)求會(huì)有包含請(qǐng)求頭信息,所以HTTPError還包含一個(gè)headers屬性。HTTPError繼承自URLError類,因此也包含有reason屬性。

代碼:

try:
 response = request.urlopen('http://www.bigdata17.com/index.htm')
except error.HTTPError as e:
 print(e.reason)
 print(e.code)
 print(e.headers)

4、解析鏈接

urllib庫(kù)中的parse類提供了很多用于解析鏈接的方法。

urlparse()方法是專門用于解析鏈接的,我們先看這個(gè)方法的返回值:

from urllib.parse import urlparse
result = urlparse('http://www.bigdata17.com')
print(result)

上面的代碼返回的結(jié)果:

ParseResult(scheme='http', netloc='www.bigdata17.com', path='', params='', query='', fragment='')

可見(jiàn)urlparse()方法返回的是ParseResult類,這個(gè)了有6個(gè)屬性,分別是scheme、netloc、path、params、query和fragment。其中scheme代表的是協(xié)議,有http,https,ftp等協(xié)議類型。netloc是網(wǎng)站域名,path是要訪問(wèn)的網(wǎng)頁(yè)名稱。params是代表參數(shù)。query查詢參數(shù),fragment是錨點(diǎn)。

urlparse()方法是如何將一個(gè)鏈接映射到上面的6個(gè)參數(shù)中呢?
繼續(xù)看下一段代碼:

from urllib.parse import urlparse
result = urlparse('http://www.bigdata17.com/22.html;user=bigdata17?id=10#content')
print(result)

運(yùn)行的結(jié)果如下:

ParseResult(scheme='http', netloc='www.bigdata17.com', path='/22.html', params='user=bigdata17', query='id=10', fragment='content')

可見(jiàn)從鏈接開(kāi)始為://止,是scheme。從://開(kāi)始到一個(gè)/位置,是netloc域名。從/開(kāi)始到;分號(hào)為止是path,訪問(wèn)頁(yè)面的路徑。;開(kāi)始到?為止是params參數(shù)。從?問(wèn)號(hào)開(kāi)始到#井號(hào)結(jié)束時(shí)query查詢參數(shù)。最后是fragment錨點(diǎn)參數(shù)。

5、urlopen()方法

該方法返回的是HTTPResponse對(duì)象:

import urllib.request as request
response = request.urlopen('http://www.bigdata17.com')
print(response)

<http.client.HTTPResponse object at 0x000002A9655BBF28>

HTTPResponse對(duì)象有read(),getheaders()等方法。

通過(guò)read()方法可以讀取網(wǎng)頁(yè)的信息:

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

使用該方法時(shí)要注意網(wǎng)站使用的編碼格式,配合decode()方法一起使用,否則會(huì)出現(xiàn)亂碼。像百度用的是utf-8,網(wǎng)易用的是gbk。

getHeaders()方法返回的是網(wǎng)頁(yè)的頭信息:

import urllib.request as request
response = request.urlopen('http://www.bigdata17.com')
print(response.getheaders())

結(jié)果:

[('Server', 'nginx/1.12.2'), ('Date', 'Mon, 12 Nov 2018 15:45:22 GMT'), ('Content-Type', 'text/html'), ('Content-Length', '38274'), ('Last-Modified', 'Thu, 08 Nov 2018 00:35:52 GMT'), ('Connection', 'close'), ('ETag', '"5be384e8-9582"'), ('Accept-Ranges', 'bytes')]

繼續(xù)看urlopen()方法有哪些參數(shù):

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
其中url是必須傳遞的參數(shù),其他的參數(shù)不是必須傳遞的。data用于將數(shù)據(jù)傳輸?shù)轿覀円廊〉木W(wǎng)站上,例如用戶名、密碼、驗(yàn)證碼等。timeout是設(shè)置請(qǐng)求超時(shí)時(shí)間。

data參數(shù)的用法:

>>> import urllib.parse as parse
>>> import urllib.request as request
>>> data = bytes(parse.urlencode({'username': 'bigdata17'}), encoding='utf8')
>>> print(data)
b'username=bigdata17'
>>> response = request.urlopen('http://httpbin.org/post', data=data)
>>> print(response.read())
b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "username
": "bigdata17"\n }, \n "headers": {\n "Accept-Encoding": "identity", \n
"Connection": "close", \n "Content-Length": "18", \n "Content-Type": "appl
ication/x-www-form-urlencoded", \n "Host": "httpbin.org", \n "User-Agent":
 "Python-urllib/3.7"\n }, \n "json": null, \n "origin": "183.134.52.58", \n
"url": "http://httpbin.org/post"\n}\n'

使用data傳輸數(shù)據(jù)時(shí),必須將urlencode方法將data的數(shù)據(jù)轉(zhuǎn)換為bytes類型。

在使用urlopen方法時(shí),如果不使用data參數(shù),則使用的get方式傳送數(shù)據(jù),如果使用了data參數(shù),則是以post的方式傳送數(shù)據(jù)。post的方式必須保證要爬取的網(wǎng)站上有相應(yīng)的方法(上面代碼要爬取的網(wǎng)址是http://httpbin.org/post,post就是要處理我們通過(guò)data參數(shù)傳輸數(shù)據(jù)的方法),否則會(huì)報(bào)urllib.error.HTTPError: HTTP Error 404: NOT FOUND的錯(cuò)誤。

timeout參數(shù)的用法:

該參數(shù)是用于設(shè)置請(qǐng)求超時(shí)時(shí)間,免得出現(xiàn)網(wǎng)絡(luò)故障或服務(wù)器異常時(shí)我們的爬蟲程序長(zhǎng)時(shí)間等:

import urllib.request as request
response = request.urlopen('http://www.bigdata17.com', timeout=1)
print(response.read())

如果將timeout設(shè)置為0.01,則會(huì)報(bào)如下的錯(cuò)誤:

socket.timeout: timed out
During handling of the above exception, another exception

設(shè)置請(qǐng)求頭信息:

請(qǐng)求的頭信息一般對(duì)帶有瀏覽器的信息,很多網(wǎng)站根據(jù)請(qǐng)求頭信息來(lái)判斷該請(qǐng)求是正常的瀏覽器發(fā)起的還是由爬蟲發(fā)起的。設(shè)置爬蟲頭信息方法:

from urllib import request, parse

url = 'http://httpbin.org/post'
headers = {
 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
 'Host': 'httpbin.org'
}
dict = {
 'name': 'bigdata17'
}
data = bytes(parse.urlencode(dict), encoding='utf8')
req = request.Request(url=url, data=data, headers=headers, method='POST')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

設(shè)置代理:

如果一個(gè)ip過(guò)于頻繁的訪問(wèn)某一個(gè)網(wǎng)站時(shí),根據(jù)反爬蟲措施,會(huì)限制該IP的訪問(wèn)。我們可以通過(guò)urllib提供的ProxyHandler方法來(lái)設(shè)置代理:

import urllib.request
proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.bigdata17.com:3128/'})
proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
# This time, rather than install the OpenerDirector, we use it directly:
opener.open('https://accounts.douban.com/login?alias=&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1001')

總結(jié)

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

相關(guān)文章

  • Python元組超詳細(xì)講解(小白篇)

    Python元組超詳細(xì)講解(小白篇)

    這篇文章主要介紹了Python元組超詳細(xì)講解的相關(guān)資料,元組是Python中的一種不可變序列類型,適用于存儲(chǔ)多個(gè)有序元素,它支持多種操作,如索引、切片、合并、重復(fù)等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • matplotlib 三維圖表繪制方法簡(jiǎn)介

    matplotlib 三維圖表繪制方法簡(jiǎn)介

    這篇文章主要介紹了matplotlib 三維圖表繪制方法簡(jiǎn)介,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 利用python爬取軟考試題之ip自動(dòng)

    利用python爬取軟考試題之ip自動(dòng)

    最近為了考試打算抓取網(wǎng)上的軟考試題,在抓取中遇到一些問(wèn)題,下面這篇文章主要介紹的是利用python爬取軟考試題之ip自動(dòng)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Python數(shù)據(jù)解析之BeautifulSoup4的用法詳解

    Python數(shù)據(jù)解析之BeautifulSoup4的用法詳解

    Beautiful?Soup?是一個(gè)可以從?HTML?或?XML?文件中提取數(shù)據(jù)的?Python?庫(kù),這篇文章主要來(lái)和大家介紹一下BeautifulSoup4的用法,需要的可以參考一下
    2023-06-06
  • Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)

    Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Pycharm連接遠(yuǎn)程服務(wù)器過(guò)程圖解

    Pycharm連接遠(yuǎn)程服務(wù)器過(guò)程圖解

    這篇文章主要介紹了Pycharm連接遠(yuǎn)程服務(wù)器過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python3實(shí)現(xiàn)單目標(biāo)粒子群算法

    python3實(shí)現(xiàn)單目標(biāo)粒子群算法

    這篇文章主要為大家詳細(xì)介紹了python3實(shí)現(xiàn)單目標(biāo)粒子群算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • python 計(jì)算平均平方誤差(MSE)的實(shí)例

    python 計(jì)算平均平方誤差(MSE)的實(shí)例

    今天小編就為大家分享一篇python 計(jì)算平均平方誤差的實(shí)例 (MSE),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • Python中random模塊生成隨機(jī)數(shù)詳解

    Python中random模塊生成隨機(jī)數(shù)詳解

    本文給大家匯總了一下在Python中random模塊中最常用的生成隨機(jī)數(shù)的方法,有需要的小伙伴可以參考下
    2016-03-03
  • Python的Socket編程過(guò)程中實(shí)現(xiàn)UDP端口復(fù)用的實(shí)例分享

    Python的Socket編程過(guò)程中實(shí)現(xiàn)UDP端口復(fù)用的實(shí)例分享

    這篇文章主要介紹了Python的Socket編程過(guò)程中實(shí)現(xiàn)UDP端口復(fù)用的實(shí)例分享,文中作者用到了Python的twisted異步框架,需要的朋友可以參考下
    2016-03-03

最新評(píng)論

江永县| 宁南县| 太白县| 明水县| 顺平县| 宁津县| 普定县| 巫溪县| 柳林县| 瑞丽市| 道真| 瓦房店市| 晋州市| 伊春市| 玉山县| 霍林郭勒市| 浦江县| 灵石县| 和平区| 黄大仙区| 旌德县| 抚远县| 奈曼旗| 上高县| 靖宇县| 威远县| 佛坪县| 常宁市| 黎平县| 喀什市| 藁城市| 旌德县| 宁津县| 旬阳县| 永川市| 九台市| 本溪| 甘孜县| 德兴市| 江北区| 大石桥市|