urllib模塊基本用法


urllib

- python中自帶的一個基於爬蟲的模塊。
- 作用:可以使用代碼模擬瀏覽器發起請求。 (含2個子模塊 request parse)
- 使用流程:
    - 指定url
    - 發起請求
    - 獲取頁面數據
    - 持久化存儲

# 需求:爬取搜狗首頁的頁面數據
 
import urllib.request

#1. 指定url  (必須以字符串形式)
url = 'https://www.sogou.com/'
#2. 發起請求:urlopen 可以根據指定的url發起請求,且返回一個相應對象
response = urllib.request.urlopen(url=url)
#3. 獲取頁面數據:read函數的返回值就是相應對象中存儲的頁面數據(bytes類型)
page_text = response.read()
#4. 持久化存儲
with open('./sogou.html','wb')as fp:
    fp.write(page_text)
    print('寫入數據成功')
# 需求: 爬起指定詞條對應的頁面數據

import urllib.request
import urllib.parse

#指定url
url= 'https://www.sogou.com/web?query='
#url 特性:url不可以存在非ASCII編碼的字符數據
word = urllib.parse.quote('周傑倫')     #%E4%BA%BA%E6%B0%91%E5%B8%81
url += word  #有效的url   https://www.sogou.com/web?query=%E4%BA%BA%E6%B0%91%E5%B8%81

#發請求
response = urllib.request.urlopen(url=url)

#獲取頁面數據
page_text = response.read()

#持久化存儲
with open('zhoujielun.html','wb') as fp:
    fp.write(page_text)
    print('done')
  • 反爬機制:網站檢查請求的UA,如果發現UA是爬蟲程序,則拒絕提供網站數據
  • User-Agent(UA):請求載體的身份標識。
  • 反反爬機制:偽裝爬蟲程序的請求UA 
    import urllib.request
    
    url = 'http://www.baidu.com/'
    #UA偽裝
    #1 自定制一個請求對象,寫成字典的格式
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    }
    request = urllib.request.Request(url=url, headers = headers)
    
    #2 針對自定制的請求對象發起請求
    response = urllib.request.urlopen(request)
    
    page_text = response.read()
    
    with open('baidu.html','wb') as fp:
        fp.write(page_text)
        

    urllib模塊發起POST請求

    • 需求 :爬取百度翻譯的翻譯結果  。知識點: 抓包工具network下的XHR是針對ajax請求的

      import urllib.request
      import urllib.parse
      # 指定url
      url = 'https://fanyi.baidu.com/sug'
      
      #post請求攜帶的參數進行處理 流程:
      #1 將post請求參數封裝到字典
      data = {
          'kw':'西瓜'
      }
      #2 使用parse模塊中的urlencode(返回值類型為str)進行編碼處理
      data = urllib.parse.urlencode(data)
      #3 將步驟2編碼結果轉換成byte類型
      data = data.encode()
      
      #發起post請求:urlopen函數的data參數表示的就是經過處理之后的post請求
      response = urllib.request.urlopen(url=url,data=data)
      
      page_text = response.read()  #返回值是一個json字符串
      
      with open('translate.html','wb') as f:
          f.write(page_text)

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM