欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python爬蟲---從零開始(二)Urllib庫

系統(tǒng) 1817 0

  接上文再繼續(xù)我們的爬蟲,這次我們來述說Urllib庫

1,什么是Urllib庫

  Urllib庫是python內(nèi)置的HTTP請求庫

  urllib.request  請求模塊

  urllib.error    異常處理模塊

  urllib.parse  ? ?url解析模塊

  urllib.robotparse? robots.txt解析模塊

  不需要額外安裝,python自帶的庫。

注意

python2

import urllib2

  response = urllib2.urlopen('http://baidu.com')

python3

import urllib.request

  response = urilib.request.urlopen('http://www.baidu.com') ?

  python2和python3使用urllib庫還是有一定區(qū)別的。

2,方法以及模塊:

  1)request

  基本運行:(get方式的請求)

import urllib.request

  response = urilib.request.urlopen(' http://www.baidu.com ')

  print(response.read().decode(' utf-8 '))

  運行結(jié)果如下:

  在這里我們看到,當我們輸入 urllib.request.urlopen('http://baidu.com') 時,我們會得到一大長串的文本,也就是我們將要從這個得到的文本里得到我們所需要的數(shù)據(jù)。

  帶有請求參數(shù):(post方式的請求)

import ?urllib.request

import urllib.parse

data = bytes (urllib.parse.urlencode({' username ':' cainiao '}),encoding=' utf8 ')

  response = urllib.request.urlopen(' http://httpbin.org/post ',data = data )

  print(response.read())?

python爬蟲---從零開始(二)Urllib庫_第1張圖片

  在這里我們不難看出,我們給予的data username參數(shù)已經(jīng)傳遞過去了。

注意 data 必須為bytes類型

  設(shè)置請求超時時間:

import ?urllib.request

  response = urllib.request.urlopen(' http://httpbin.org/get ', timeout = 1 )

  print(response.read())?

python爬蟲---從零開始(二)Urllib庫_第2張圖片

這時我們看到,執(zhí)行代碼時報出timed out錯誤。我們這時可以使用urllib.error模塊,代碼如下

import ?urllib.request

ipmort urllib.error

try :

    response = urllib.request.urlopen(' http://httpbin.org/get ', timeout = 0.1 )

    print(response.read())?

except urllib.error.URLError as e:

    print(' 鏈接超時啦~! ') # 這里我們沒有判斷錯誤類型,可以自行加入錯誤類型判斷,然后在進行輸出。

說到這,我們就把最簡單,最基礎(chǔ)的urlopen的基礎(chǔ)全都說完了,有能力的小伙伴,可以進行詳細閱讀其源碼,更深入的了解該方法。

  2)響應(yīng) response

import urllib.request

  response = urllib.request.urlopen(' http://www.baidu.com ')

  print(type(response))

  # 得到一個類型為

python爬蟲---從零開始(二)Urllib庫_第3張圖片

import urllib.request

  response = urllib.request.urlopen(' http://www.baidu.com ')

  print( type (response)) # 響應(yīng)類型

  print(response. status ) #上篇文章提到的狀態(tài)碼

  print(response. getheaders )? # 請求頭

  print(response.getheader(' Server ')) # 取得請求頭參數(shù)

python爬蟲---從零開始(二)Urllib庫_第4張圖片

import ?urllib.request

  response = urllib.request.urlopen(' http://www.baidu.com ')

  print(response.read().decode(' utf-8 '))?# 響應(yīng)體,響應(yīng)內(nèi)容

  響應(yīng)體為字節(jié)流形式的內(nèi)容,我們需要調(diào)用decode(decode('utf-8'))進行轉(zhuǎn)碼。

?

常用的post請求基本寫法

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':' cxiaocai '

  }

  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 '))

  也可以寫成這樣的

from ?urllib? import ?request,parse

  url = ' http://httpbin.org/post '

  dict?= {

    'name':' cxiaocai '

  }

  data =? bytes (parse.urlencode( dict ),encoding=' utf8 ')

  req = request.Request(url =url , data = data , headers = headers , method = ' POST ')

  req.add_header(' User-Agent':'Mozilla/4.0(compatible;MSIE 5.5;Windows NT) ')

  response = request.urlopen(req)

  print(response.read().decode(' utf-8 '))

  說到這里,我們最基本的urllib請求就可以基本完成了,很大一部分網(wǎng)站也可以進行爬取了。

3,代理設(shè)置

  代理設(shè)置我們這里簡單的說一下,后面的博客我們會用實際爬蟲來說明這個。

Hander代理

import urllib.request

  proxy_hander = urllib.request.ProxyHeader({

    'http':' http://127.0.0.1:1111 ' ,

    'https':' https://127.0.0.1:2222'

  })

  opener = urllib.request.build_opener( proxy_hander )

  response = opener.open(' http://www.baidu.com ')

  print(response.read()) # 我這沒有代理,沒有測試該方法。

Cookie設(shè)置

import http.cookiejar, urllib.request

cookie = http.cookiejar.CookieJar()

hander = urllib.request.HTTPCookieProcessor( cookie )

  opener = urllib.request.build_opener( hander )

  response = opener.open(" http://www.baidu.com ")

  for item in cookie:

    print(item.name + "=" + item.value)

python爬蟲---從零開始(二)Urllib庫_第5張圖片

  ? 例如某些網(wǎng)站是需要登陸的,所有我們在這里需要設(shè)置Cookie

  我們也可以將Cookie保存為文本文件,便于多次進行讀取。

?

  import http .cookiejar , urllib .request

?

  filename = 'cookie.txt'

  cookie = http .cookiejar . MozillaCookieJar (filename )

  hander = urllib .request . HTTPCookieProcessor (cookie )

  opener = urllib .request . build_opener (hander )

  response = opener . open ( "http://www.baidu.com " )

  cookie . save (ignore_discard = True , ignore_expires = True )

  代碼運行以后會在項目目錄下生成一個cookie.txt

python爬蟲---從零開始(二)Urllib庫_第6張圖片

  另外一種Cookie的保存格式 ?

  import http .cookiejar , urllib .request

?

  filename = 'cookie.txt'

  cookie = http .cookiejar . LWPCookieJar (filename )

  hander = urllib .request . HTTPCookieProcessor (cookie )

  opener = urllib .request . build_opener (hander )

  response = opener . open ( "http://www.baidu.com " )

  cookie . save (ignore_discard = True , ignore_expires = True )

          
             運行代碼以后也會生成一個txt文件,格式如下
            
python爬蟲---從零開始(二)Urllib庫_第7張圖片
          
下面我們來讀取我們過程保存的Cookie文件

import? http .cookiejar , urllib .request

?

cookie? = http .cookiejar . LWPCookieJar ()

cookie . load ( 'cookie.txt' ,ignore_expires = True ,ignore_discard = True )

hander? = urllib .request . HTTPCookieProcessor (cookie )

opener? = urllib .request . build_opener (hander )

response? =? opener . open ( 'http://www.baidu.com ' )

print ( response .read ().decode ( 'utf-8' ))

          
            
              
                4,異常處理
              
            
            
  簡單事例,在這里我們來訪問一個不存在的網(wǎng)站

from urllib import request ,error

try :

? ? response = request . urlopen ( 'https://www.cnblogs.com/cxiaocai/articles/index123.html' )

except error .URLError as e :

? ? print (e .reason )

          
             這里我們知道這個網(wǎng)站根本不存在的,會報錯,我們捕捉該異常可以保證程序繼續(xù)運行,我們可以執(zhí)行重試操作
            
 我們也可以查看官網(wǎng) https://docs.python.org/3/library/urllib.error.html#module-urllib.error

5,URL解析
  urlparse模塊
  主要用戶解析URL的模塊,下面我們先來一個簡單的示例

from urllib .parse import urlparse

result = urlparse ( 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1 ' )

print ( type (result ),result )

          
            這里我們看下輸出結(jié)果:
            
python爬蟲---從零開始(二)Urllib庫_第8張圖片
  該方法可以進行url的拆分
  也可以制定請求方式http,或者https方式請求

from urllib .parse import urlparse

?

result = urlparse ('www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1' , scheme ='https' )

print (result )

          
             輸出結(jié)果如下所示:
            
python爬蟲---從零開始(二)Urllib庫_第9張圖片
  在這里我們看到了,請求被制定了https請求
  我們會看到輸出結(jié)果里包含一個fragents,我們想將framents拼接到query后面,我們可以這樣來做

from urllib .parse import urlparse

?

result = urlparse ( 'http://www.baidu.com/index.html;user?id=5#commont ' , allow_fragments = False )

print (result )

          
              輸出結(jié)果為
            
python爬蟲---從零開始(二)Urllib庫_第10張圖片
  如果沒有frament,則拼接到path內(nèi)
  示例:
python爬蟲---從零開始(二)Urllib庫_第11張圖片

  我們現(xiàn)在知道了URl怎么進行拆分,如果我們得到了URl的集合,例如這樣dada = ['http','www.baidu.com','index.html','user','a=6','comment']
我們可以使用urlunparse
python爬蟲---從零開始(二)Urllib庫_第12張圖片

  還有urljoin,主要是來進行url的拼接的,接下來我們來看下我們的示例:
python爬蟲---從零開始(二)Urllib庫_第13張圖片
以后面的為基準,如果有就留下,如果沒有就從前面取。
  如果我們的有了一個字典類型的參數(shù),和一個url,我們想發(fā)起get請求(上一期說過get請求傳參),我們可以這樣來做,
python爬蟲---從零開始(二)Urllib庫_第14張圖片
在這里我們需要注意的是,url地址后面需要自行加一個‘?’。
最后還有一個urllib.robotparser,主要用robot.txt文件的官網(wǎng)有一些示例,由于這個不常用,在這里我做過多解釋。
官網(wǎng)地址:https://docs.python.org/3/library/urllib.robotparser.html#module-urllib.robotparser 感興趣的小伙伴可以自行閱讀官方文檔。

到這里我們就把urllib的基本用法全部說了一遍,可以自己嘗試寫一些爬蟲程序了(先用正則解析,后期我們有更簡單的方法)。
想更深入的研讀urllib庫,可以直接登陸官方網(wǎng)站直接閱讀其源碼。官網(wǎng)地址: https://docs.python.org/3/library/urllib.html
注意:很多小伙伴看到我的代碼直接復(fù)制過去,但發(fā)現(xiàn)直接粘貼會報錯,還需要自己刪除多余的空行,在這里我并不建議你們復(fù)制粘貼,后期我們整理一個github供大家直接使用。
下一篇文章我會弄一篇關(guān)于Requests包的使用,個人感覺比urllib更好用,敬請期待。
   感謝大家的閱讀,不正確的地方,還希望大家來斧正,鞠躬,謝謝。


?

?


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美视频二区 | 波多野结衣的一级片 | 麻豆国产精品 | 精品一区二区高清在线观看 | 成人午夜天堂 | 亚洲品质自拍视频 | 激情综合网俺也去 | 日韩在线视频在线观看 | 日本黄色免费网站 | 99这里只有精品66视频 | 欧美一区二区三区四区夜夜大片 | 在线播放一区 | 成人精品鲁一区一区二区 | 四库影院永久在线精品 | 日美女网站| 大伊香蕉在线精品不卡视频 | 2021国产精品成人免费视频 | 欧美激情图片区 | 国产在线看片 | 毛片网站大全 | 国产精品视频一区二区三区不卡 | 天天操天天干天天 | 久久视频一区 | 在线播放国产一区二区三区 | 欧美亚洲韩国国产综合五月天 | 国产高清美女一级毛片 | 日韩一二三 | 日韩区在线| 亚洲成av人在线视 | 三级网址在线播放 | 日本黄页免费大片在线观看 | 52avcom| 性欧美精品久久久久久久 | 91人人草| 日韩免费一区二区三区 | 美女午夜影院 | 男女爽爽视频 | 不卡视频一区二区 | 亚洲国产欧美在线人成aaa | 国产一区二区黑人欧美xxxx | 日本高清不卡在线 |