<code id="8ka2b"></code>
<th id="8ka2b"></th>
<em id="8ka2b"></em>

<li id="8ka2b"><acronym id="8ka2b"><kbd id="8ka2b"></kbd></acronym></li>
    <dd id="8ka2b"><pre id="8ka2b"></pre></dd>
    1. <dd id="8ka2b"></dd>

        <ol id="8ka2b"><object id="8ka2b"><blockquote id="8ka2b"></blockquote></object></ol>

        千鋒教育-做有情懷、有良心、有品質的職業教育機構

        手機站
        千鋒教育

        千鋒學習站 | 隨時隨地免費學

        千鋒教育

        掃一掃進入千鋒手機站

        領取全套視頻
        千鋒教育

        關注千鋒學習站小程序
        隨時隨地免費學習課程

        【熱點話題】 零基礎學IT IT學習教程 IT學習筆記 IT技術干貨 IT培訓機構 IT應聘面試 IT職場就業 Java培訓機構哪些好
        當前位置:首頁  >  關于學院  >  技術干貨  > Python爬蟲庫urllib使用詳解!

        Python爬蟲庫urllib使用詳解!

        來源:千鋒教育
        發布人:wjy
        時間: 2023-01-10 10:06:07 1673316367

          Python爬蟲庫urllib使用詳解!

          一、Python urllib庫

          Python urllib 庫用于操作網頁 URL,并對網頁的內容進行抓取處理。

          Python3 的 urllib。

          urllib 包 包含以下幾個模塊:

          ●urllib.request - 打開和讀取 URL。

          ●urllib.error - 包含 urllib.request 拋出的異常。

          ●urllib.parse - 解析 URL。

          ●urllib.robotparser - 解析 robots.txt 文件。

          二、urllib.request模塊

          urllib.request 定義了一些打開 URL 的函數和類,包含授權驗證、重定向、瀏覽器 cookies等。

          urllib.request 可以模擬瀏覽器的一個請求發起過程。

          這里主要介紹兩個常用方法,urlopen和Request。

          1.urlopen函數

          語法格式如下:

        Python爬蟲庫urllib使用詳解1

          url:url 地址。

          data:發送到服務器的其他數據對象,默認為 None。

          timeout:設置訪問超時時間。

          cafile 和 capath:cafile 為 CA 證書, capath 為 CA 證書的路徑,使用 HTTPS 需要用到。

          cadefault:已經被棄用。

          context:ssl.SSLContext類型,用來指定 SSL 設置。

          示例:

        Python爬蟲庫urllib使用詳解2

          運行結果:

        Python爬蟲庫urllib使用詳解3

          response對象是http.client. HTTPResponse類型,主要包含 read、readinto、getheader、getheaders、fileno 等方法,以及 msg、version、status、reason、debuglevel、closed 等屬性。

          常用方法:

          read():是讀取整個網頁內容,也可以指定讀取的長度,如read(300)。獲取到的是二進制的亂碼,所以需要用到decode()命令將網頁的信息進行解碼。

          readline() - 讀取文件的一行內容。

          readlines() - 讀取文件的全部內容,它會把讀取的內容賦值給一個列表變量。

          info():返回HTTPMessage對象,表示遠程服務器返回的頭信息。

          getcode():返回Http狀態碼。如果是http請求,200請求成功完成;404網址未找到。

          geturl():返回請求的url。

          2、Request類

          我們抓取網頁一般需要對 headers(網頁頭信息)進行模擬,否則網頁很容易判定程序為爬蟲,從而禁止訪問。這時候需要使用到 urllib.request.Request 類:

        Python爬蟲庫urllib使用詳解4

          url:url 地址。

          data:發送到服務器的其他數據對象,默認為 None。

          headers:HTTP 請求的頭部信息,字典格式。

          origin_req_host:請求的主機地址,IP 或域名。

          unverifiable:很少用整個參數,用于設置網頁是否需要驗證,默認是False。。

          method:請求方法, 如 GET、POST、DELETE、PUT等。

          示例:

        Python爬蟲庫urllib使用詳解5

          三、urllib.error模塊

          urllib.error 模塊為 urllib.request 所引發的異常定義了異常類,基礎異常類是 URLError。

          urllib.error 包含了兩個方法,URLError 和 HTTPError。

          URLError 是 OSError 的一個子類,用于處理程序在遇到問題時會引發此異常(或其派生的異常),包含的屬性 reason 為引發異常的原因。

          HTTPError 是 URLError 的一個子類,用于處理特殊 HTTP 錯誤例如作為認證請求的時候,包含的屬性 code 為 HTTP 的狀態碼, reason 為引發異常的原因,headers 為導致 HTTPError 的特定 HTTP 請求的 HTTP 響應頭。

          區別:

          URLError封裝的錯誤信息一般是由網絡引起的,包括url錯誤。

          HTTPError封裝的錯誤信息一般是服務器返回了錯誤狀態碼。

          關系:

          URLError是OSERROR的子類,HTTPError是URLError的子類。

          1.URLError 示例

        Python爬蟲庫urllib使用詳解6

          返回結果:

        Python爬蟲庫urllib使用詳解7

          reason:

          此錯誤的原因。它可以是一個消息字符串或另一個異常實例。

          2.HTTPError示例

        Python爬蟲庫urllib使用詳解8

          返回結果:

        Python爬蟲庫urllib使用詳解9

          code

          一個 HTTP 狀態碼,具體定義見 RFC 2616。這個數字的值對應于存放在

          http.server.BaseHTTPRequestHandler.responses 代碼字典中的某個值。

          reason

          這通常是一個解釋本次錯誤原因的字符串。

          headers

          導致 HTTPError 的特定 HTTP 請求的 HTTP 響應頭。

          3.URLError和HTTPError混合使用

          注意:由于HTTPError是URLError的子類,所以捕獲的時候HTTPError要放在URLError的上面。

          示例:

        Python爬蟲庫urllib使用詳解10

          如果不用上面的方法,可以直接用判斷的形式。

        Python爬蟲庫urllib使用詳解11

          執行結果:

        Python爬蟲庫urllib使用詳解12

          四、urllib.parse模塊

          模塊定義的函數可分為兩個主要門類: URL 解析和 URL 轉碼。

          4.1 URL 解析

          4.1.1 urlparse()

          urllib.parse 用于解析 URL,格式如下:

        Python爬蟲庫urllib使用詳解13

          urlstring 為 字符串的 url 地址,scheme 為協議類型。

          allow_fragments 參數為 false,則無法識別片段標識符。相反,它們被解析為路徑,參數或查詢組件的一部分,并 fragment 在返回值中設置為空字符串。

          標準鏈接格式為:

        Python爬蟲庫urllib使用詳解14

          對象中包含了六個元素,分別為:協議(scheme)、域名(netloc)、路徑(path)、路徑參數(params)、查詢參數(query)、片段(fragment)。

          示例:

        Python爬蟲庫urllib使用詳解15

          執行結果:

        Python爬蟲庫urllib使用詳解16

          以上還可以通過索引獲取,如通過

        Python爬蟲庫urllib使用詳解17

          4.1.2 urlunparse()

          urlunparse()可以實現URL的構造。(構造URL)

          urlunparse()接收一個是一個長度為6的可迭代對象,將URL的多個部分組合為一個URL。若可迭代對象長度不等于6,則拋出異常。

          示例:

        Python爬蟲庫urllib使用詳解18

          結果:

        Python爬蟲庫urllib使用詳解19

          4.1.3 urlsplit()

          urlsplit() 函數也能對 URL 進行拆分,所不同的是, urlsplit() 并不會把 路徑參數(params) 從 路徑(path) 中分離出來。

          當 URL 中路徑部分包含多個參數時,使用 urlparse() 解析是有問題的,這時可以使用 urlsplit() 來解析.

          4.1.4 urlsplit()

          urlunsplit()與 urlunparse()類似,(構造URL),傳入對象必須是可迭代對象,且長度必須是5。

          示例:

        Python爬蟲庫urllib使用詳解20

          結果:

        Python爬蟲庫urllib使用詳解21

          4.1.5 urljoin()

          同樣可以構造URL。

          傳遞一個基礎鏈接,根據基礎鏈接可以將某一個不完整的鏈接拼接為一個完整鏈接.

          注:連接兩個參數的url, 將第二個參數中缺的部分用第一個參數的補齊,如果第二個有完整的路徑,則以第二個為主。

          4.2 URL 轉碼

          python中提供urllib.parse模塊用來編碼和解碼,分別是urlencode()與unquote()。

          4.2.1 編碼quote(string)

          URL 轉碼函數的功能是接收程序數據并通過對特殊字符進行轉碼并正確編碼非 ASCII 文本來將其轉為可以安全地用作 URL 組成部分的形式。它們還支持逆轉此操作以便從作為 URL 組成部分的內容中重建原始數據,如果上述的 URL 解析函數還未覆蓋此功能的話

          語法:

        Python爬蟲庫urllib使用詳解22

          使用 %xx 轉義符替換 string 中的特殊字符。字母、數字和 '_.-~' 等字符一定不會被轉碼。在默認情況下,此函數只對 URL 的路徑部分進行轉碼??蛇x的 safe 形參額外指定不應被轉碼的 ASCII 字符 --- 其默認值為 '/'。

          string 可以是 str 或 bytes 對象。

          示例:

        Python爬蟲庫urllib使用詳解23

          執行結果:

        Python爬蟲庫urllib使用詳解24

          4.2.2 編碼urlencode()

          quote()只能對字符串編碼,而urlencode()可以對查詢字符串進行編碼。

        Python爬蟲庫urllib使用詳解25

          結果:

        Python爬蟲庫urllib使用詳解26

          4.2.3 解碼unquote(string)

          解碼就是對編碼后的url進行還原。

          示例:

        Python爬蟲庫urllib使用詳解27

          執行結果:

        Python爬蟲庫urllib使用詳解28

          五、urllib.robotparser模塊

          (在網絡爬蟲中基本不會用到,使用較少,僅作了解)

          urllib.robotparser 用于解析 robots.txt 文件。

          robots.txt(統一小寫)是一種存放于網站根目錄下的 robots 協議,它通常用于告訴搜索引擎對網站的抓取規則。

          Robots協議也稱作爬蟲協議,機器人協議,網絡爬蟲排除協議,用來告訴爬蟲哪些頁面是可以爬取的,哪些頁面是不可爬取的。它通常是一個robots.txt的文本文件,一般放在網站的根目錄上。

          當爬蟲訪問一個站點的時候,會首先檢查這個站點目錄是否存在robots.txt文件,如果存在,搜索爬蟲會根據其中定義的爬取范圍進行爬取。如果沒有找到這個文件,搜索爬蟲會訪問所有可直接訪問的頁面。

          urllib.robotparser 提供了 RobotFileParser 類,語法如下:

        Python爬蟲庫urllib使用詳解29

          這個類提供了一些可以讀取、解析 robots.txt 文件的方法:

          set_url(url) - 設置 robots.txt 文件的 URL。

          read() - 讀取 robots.txt URL 并將其輸入解析器。

          parse(lines) - 解析行參數。

          can_fetch(useragent, url) - 如果允許 useragent 按照被解析 robots.txt 文件中的規則來獲取 url 則返回 True。

          mtime() -返回最近一次獲取 robots.txt 文件的時間。這適用于需要定期檢查 robots.txt 文件更新情況的長時間運行的網頁爬蟲。

          modified() - 將最近一次獲取 robots.txt 文件的時間設置為當前時間。

          crawl_delay(useragent) -為指定的 useragent 從 robots.txt 返回 Crawl-delay 形參。如果此形參不存在或不適用于指定的 useragent 或者此形參的 robots.txt 條目存在語法錯誤,則返回 None。

          request_rate(useragent) -以 named tuple RequestRate(requests, seconds) 的形式從 robots.txt 返回 Request-rate 形參的內容。如果此形參不存在或不適用于指定的 useragent 或者此形參的 robots.txt 條目存在語法錯誤,則返回 None。

          site_maps() - 以 list() 的形式從 robots.txt 返回 Sitemap 形參的內容。如果此形參不存在或者此形參的 robots.txt 條目存在語法錯誤,則返回 None。

        聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。

        10年以上業內強師集結,手把手帶你蛻變精英

        請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通

        免費領取

        今日已有369人領取成功

        劉同學 138****2860 剛剛成功領取
        王同學 131****2015 剛剛成功領取
        張同學 133****4652 剛剛成功領取
        李同學 135****8607 剛剛成功領取
        楊同學 132****5667 剛剛成功領取
        岳同學 134****6652 剛剛成功領取
        梁同學 157****2950 剛剛成功領取
        劉同學 189****1015 剛剛成功領取
        張同學 155****4678 剛剛成功領取
        鄒同學 139****2907 剛剛成功領取
        董同學 138****2867 剛剛成功領取
        周同學 136****3602 剛剛成功領取

        猜你喜歡LIKE

        最新文章NEW

        相關推薦HOT

        更多>>

        ARM內核有多少個寄存器,請列舉出這些寄存器的名字

        未分組寄存器:R0-R7  分組寄存器 :R8-R14  程序計數器PC即R15寄存器  狀態寄存器CPSR  備份狀態寄存器SPSR  R13:SP棧指針寄存器,...詳情>>

        2023-01-20 19:57:50

        版本升級后,測試人有哪些工作要做?

        眾所周知,在軟件的生命周期中,只要軟件不被淘汰,測試的工作就要一直進行。很多時候一旦項目版本發布,大部分測試人員都會認為工作終于結束了...詳情>>

        2023-01-13 14:37:32

        發現一個寶藏Python庫,玩社區發現算法的不能錯過!

        網絡是由一些緊密相連的節點組成的,并且根據不同節點之間連接的緊密程度,網絡也可視為由不同簇組成。簇內的節點之間有著更為緊密的連接,不同...詳情>>

        2023-01-13 10:41:00

        數據科學使用Python時常見的9個錯誤

        通過應用軟件工程最佳實踐,可以交付質量更好數據科學的項目。更好的質量可能是更少的錯誤、可靠的結果和更高的編碼效率。最佳實踐都是從錯誤中...詳情>>

        2022-10-27 11:42:12

        Mac地址會重復嗎?Mac地址也會耗盡嗎?

        Mac地址有點像身份證號碼,而IP地址就像門牌號碼。在茫茫大海中僅憑一個身份證號碼找到一顆別樣的沙粒很難,但如果先找到具體的沙灘,沙灘劃分...詳情>>

        2022-10-20 18:01:25

        快速通道 更多>>

        開班信息
        北京校區
        • 北京校區
        • 大連校區
        • 廣州校區
        • 成都校區
        • 杭州校區
        • 長沙校區
        • 合肥校區
        • 南京校區
        • 上海校區
        • 深圳校區
        • 武漢校區
        • 鄭州校區
        • 西安校區
        • 青島校區
        • 重慶校區
        • 太原校區
        • 沈陽校區

        人人爽天天碰天天躁夜夜躁
        <code id="8ka2b"></code>
        <th id="8ka2b"></th>
        <em id="8ka2b"></em>

        <li id="8ka2b"><acronym id="8ka2b"><kbd id="8ka2b"></kbd></acronym></li>
          <dd id="8ka2b"><pre id="8ka2b"></pre></dd>
          1. <dd id="8ka2b"></dd>

              <ol id="8ka2b"><object id="8ka2b"><blockquote id="8ka2b"></blockquote></object></ol>