Python的urllib庫

  • 2019 年 10 月 7 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_36670529/article/details/101290763

urllib是python自帶的請求庫,各種功能相比較之下也是比較完備的,urllib庫包含了一下四個模組:

urllib.request 請求模組

urllib.error 異常處理模組

urllib.parse url解析模組

urllib.robotparse robots.txt解析模組

下面是一些urllib庫的使用方法。

使用urllib.request

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

使用read()方法列印網頁的HTML,read出來的是位元組流,需要decode一下

import urllib.request    response = urllib.request.urlopen('http://www.baidu.com')  print(response.status) #列印狀態碼資訊  其方法和response.getcode() 一樣  都是列印當前response的狀態碼  print(response.getheaders()) #列印出響應的頭部資訊,內容有伺服器類型,時間、文本內容、連接狀態等等  print(response.getheader('Server'))  #這種拿到響應頭的方式需要加上參數,指定你想要獲取的頭部中那一條數據  print(response.geturl())  #獲取響應的url  print(response.read())#使用read()方法得到響應體內容,這時是一個位元組流bytes,看到明文還需要decode為charset格式

為一個請求添加請求頭,偽裝為瀏覽器

1.在請求時就加上請求頭參數

import urllib.request  import urllib.parse    url = 'http://httpbin.org/post'  header = {}  header['User-Agent'] = 'Mozilla/5.0 '                             '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 '                             '(KHTML, like Gecko) Version/5.1 Safari/534.50'    req = urllib.request.Request(url=url, headers=header)  res = urllib.request.urlopen(req)

Request是一個請求類,在構造時將headers以參數形式加入到請求中

2.使用動態追加headers的方法

若要使用動態追加的方法,必須實例化Request這個類

import urllib.request  import urllib.parse    url = 'http://httpbin.org/post'    req = urllib.request.Request(url=url)  req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0')  res = urllib.request.urlopen(req)

使用代理:

ProxyHandler是urllib.request下的一個類,藉助這個類可以構造代理請求

參數為一個dict形式的,key對應著類型,IP,埠

import urllib.request    proxy_handler = urllib.request.ProxyHandler({      'http':'112.35.29.53:8088',      'https':'165.227.169.12:80'  })  opener = urllib.request.build_opener(proxy_handler)  response = opener.open('http://www.baidu.com')  print(response.read())

urllib.parse的用法

import urllib.request  import urllib.parse    url = 'http://httpbin.org/post'  header = {}  header['User-Agent'] = 'Mozilla/5.0 '                             '(Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 '                             '(KHTML, like Gecko) Version/5.1 Safari/534.50'    data = {}  data['name'] = 'us'  data = urllib.parse.urlencode(data).encode('utf-8')  req = urllib.request.Request(url=url, data=data, headers=header, method='POST')  response = urllib.request.urlopen(req)  print(response.read().decode('utf-8'))  print(type(data))