<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          淺談Python兩大爬蟲庫——urllib庫和requests庫區(qū)別

          共 2263字,需瀏覽 5分鐘

           ·

          2021-05-20 03:15

          點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關(guān)注

          回復(fù)“書籍”即可獲贈Python從入門到進階共10本電子書

          只愿君心似我心,定不負相思意。

          一、前言

          在使用Python爬蟲時,需要模擬發(fā)起網(wǎng)絡(luò)請求,主要用到的庫有requests庫和python內(nèi)置的urllib庫,一般建議使用requests,它是對urllib的再次封裝。

          那它們兩者有什么區(qū)別 ?

          下面通過案例詳細的講解 ,了解他們使用的主要區(qū)別。


          二、urllib庫

          簡介:

          urllib庫的response對象是先創(chuàng)建http,request對象,裝載到reques.urlopen里完成http請求。

          返回的是http,response對象,實際上是html屬性。使用.read().decode()解碼后轉(zhuǎn)化成了str字符串類型,decode解碼后中文字符能夠顯示出來。

          from urllib import request#請求頭headers = {    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}wd = {"wd": "中國"}url = "http://www.baidu.com/s?"req = request.Request(url, headers=headers)response = request.urlopen(req)print(type(response))print(response)res = response.read().decode()print(type(res))print(res)

          運行結(jié)果:

          df7cde6574d2789f6d89f41e0d8b47fa.webp

          注意:

          通常爬取網(wǎng)頁,在構(gòu)造http請求的時候,都需要加上一些額外信息,什么Useragent,cookie等之類的信息,或者添加代理服務(wù)器。往往這些都是一些必要的反爬機制。


          三、requests庫

          簡介:

          requests庫調(diào)用是requests.get方法傳入url和參數(shù),返回的對象是Response對象,打印出來是顯示響應(yīng)狀態(tài)碼。

          通過.text 方法可以返回是unicode 型的數(shù)據(jù),一般是在網(wǎng)頁的header中定義的編碼形式,而content返回的是bytes,二級制型的數(shù)據(jù),還有 .json方法也可以返回json字符串。

          如果想要提取文本就用text,但是如果你想要提取圖片、文件等二進制文件,就要用content,當(dāng)然decode之后,中文字符也會正常顯示。

          requests的優(yōu)勢:

          Python爬蟲時,更建議用requests庫。因為requests比urllib更為便捷,requests可以直接構(gòu)造get,post請求并發(fā)起,而urllib.request只能先構(gòu)造get,post請求,再發(fā)起。

          例:

          import requests
          headers = { "User-Agent": "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BLA-AL00 Build/HUAWEIBLA-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.9 Mobile Safari/537.36"}wd = {"wd": "中國"}url = "http://www.baidu.com/s?"response = requests.get(url, params=wd, headers=headers)data = response.textdata2 = response.contentprint(response)print(type(response))print(data)print(type(data))print(data2)print(type(data2))print(data2.decode())print(type(data2.decode()))

          運行結(jié)果 (可以直接獲取整網(wǎng)頁的信息,打印控制臺):

          cbe10bb243e204411dccd773c4e67485.webp


          四、總結(jié)

          1. 本文基于Python基礎(chǔ),主要介紹了urllib庫和requests庫的區(qū)別。

          2. 在使用urllib內(nèi)的request模塊時,返回體獲取有效信息和請求體的拼接需要decode和encode后再進行裝載。進行http請求時需先構(gòu)造get或者post請求再進行調(diào)用,header等頭文件也需先進行構(gòu)造。

          3. requests是對urllib的進一步封裝,因此在使用上顯得更加的便捷,建議在實際應(yīng)用當(dāng)中盡量使用requests。

          4. 希望能給一些對爬蟲感興趣,有一個具體的概念。方法只是一種工具,試著去爬一爬會更容易上手,網(wǎng)絡(luò)也會有很多的坑,做爬蟲更需要大量的經(jīng)驗來應(yīng)付復(fù)雜的網(wǎng)絡(luò)情況。

          5. 希望大家一起探討學(xué)習(xí), 一起進步。

          -------------------?End?-------------------

          往期精彩文章推薦:

          b034fdc7bae0959e2a00b1630fdf0ac8.webp

          歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請在后臺回復(fù)【入群

          萬水千山總是情,點個【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~~

          瀏覽 82
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂在线中文字幕 | 日韩无码123区 | 午夜电影无码 | 激情五月天成人网站 | 国产黄片在线视频 |