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)
-
