1. 程式人生 > >爬蟲--urllib模組

爬蟲--urllib模組

一.urllib庫

  概念:urllib是Python自帶的一個用於爬蟲的庫,其主要作用就是可以通過程式碼模擬瀏覽器傳送請求。其常被用到的子模組在Python3中的為urllib.requesturllib.parse,在Python2中是urllib和urllib2。

     使用流程:

  • 指定url
  • 基於urllib的request子模組發起請求
  • 獲取響應中的資料值
  • 持久化儲存

爬取搜狗首頁的頁面資料

---

# 爬取搜狗首頁的頁面資料
import urllib.request
# 1.指定url
url = '
https://www.sogou.com/' #2.發起請求:urlopean可以根據指定的url發起請求,且返回一個響應物件 response = urllib.request.urlopen(url=url) #3.獲取頁面資料:read函式返回的就是響應物件中儲存的頁面資料(byte)-二進位制形式 page_text = response.read() #print(page_text) #4.持久化儲存 with open('./sogou.html','wb')as f: f.write(page_text) print('寫入資料成功')

 

 補充說明:

urlopen函式原型:
    urllib.request.urlopen(url, data=None, timeout=<object object at 0x10af327d0>, *, cafile=None, capath=None, cadefault=False, context=None)

在上述案例中我們只使用了該函式中的第一個引數url。在日常開發中,我們能用的只有url和data這兩個引數。

url引數:指定向哪個url發起請求
data引數:可以將post請求中攜帶的引數封裝成字典的形式傳遞給該引數(暫時不需要理解,後期會講)

urlopen函式返回的響應物件,相關函式呼叫介紹:
response.headers():獲取響應頭資訊
response.getcode():獲取響應狀態碼
response.geturl():獲取請求的url
response.read():獲取響應中的資料值(位元組型別)

爬取指定詞條所對應的頁面資料

 

# 需求:爬取指定詞條所對應的頁面資料
import urllib.request
import urllib.parse

#指定url
url = 'https://www.sogou.com/web?query='

# url特性:url不可以存在非ASCII編碼的字元
word = urllib.parse.quote('人名幣')
url += word

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

# 獲取頁面資料
page_text=response.read()
# print(page_text)

#4.持久化儲存
with open('rmb.html','wb')as f:
    f.write(page_text)
    print('寫入資料成功')

雙擊rmb.html出現頁面:

 

- 反爬機制:

網站檢查請求的UA,如果發現UA是爬蟲程式,則拒絕提供網站資料
- User-Agent(UA):請求載體的身份標識
- 反反爬機制:偽裝爬蟲程式請求的UA--如何通過程式碼實現

在百度瀏覽器下點選F12

然後輸入www.sogou.com

------------------------

 

import urllib.request
#被訪問的搜狗網頁
url = 'https://www.sogou.com/'
# UA偽裝
#1.自制定一個請求物件
#儲存任意的請求頭資訊
# 此處用的百度的UA
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
#該請求物件的UA進行了成功的偽裝
request = urllib.request.Request(url=url,headers=headers)

# 2.針對自定製的請求發起請求
response = urllib.request.urlopen(request)
print(response.read())