python爬蟲-Requests庫網絡爬取實戰
- 擷取電腦IP位址
- 58同城爬取
- scdn部落格搜尋
- 視訊抓取
擷取電腦IP位址
我們先開始最簡單的抓取頁面, http://myip.ipip.net/這個網站的源代碼就是傳回的自己外網IP位址和位址,我們通過抓取這個界面知道我們的外網IP位址
爬取網頁的編碼方式預設使用的是從HTTP header中猜測的響應内容編碼格式(r.encoding),但使用這個有時并不準确,是以我們直接使用從内容中分析出來的編碼格式(r.apparent_encoding)
import requests #導入requests庫
url = "http://myip.ipip.net/"
try:
r = requests.get(url) #通過requests庫的get方法
r.raise_for_status() #判斷傳回的狀态碼是否為200,不是200傳回異常
r.encoding = r.apparent_encoding #将從内容中分析出來的編碼作為輸出的編碼格式
print(r.text) #輸出網頁的源代碼
except:
print("抓取失敗!") #異常處理
運作結果
58同城爬取
這個爬蟲例子我們主要學習User-Agent的添加,爬取的網站 58同城
import requests #導入requests庫
url = "https://bj.58.com/" #爬取的網頁
kv = {"User-Agent": "Mozilla/5.0"} #僞裝的User-Agent,爬蟲預設的是python的辨別
try:
r = requests.get(url, headers=kv, timeout=10) #将字典形式的User-Agent送出給控制參數headers,timeout是請求時間,逾時傳回異常
r.raise_for_status() #判斷傳回的狀态碼是否為200,不是200傳回異常
r.encoding = r.apparent_encoding #将從内容中分析出來的編碼作為輸出的編碼格式
print(r.text[8000:9999]) #輸出網頁的源代碼,其中[8000:9999]表示輸出8000行到9999行
except:
print("抓取失敗!") #異常處理
運作結果
scdn部落格搜尋
這個例子适用與大部分送出搜尋連結,如百度搜尋,谷歌搜尋,本例子是對部落格搜尋引擎的送出爬取
我們可以先用部落格搜一個文章看URL的變化,這個是搜尋一個“python爬蟲”的URL:https://so.csdn.net/so/search/s.do?q=python%E7%88%AC%E8%99%AB&t=&u=
我們可以看到“?”後面就是送出的參數,q=後面就是我們輸入的搜尋文字,其中中文被轉換成URL編碼
然後我們使用requests庫中的params參數進行送出
同理,360搜尋,百度搜尋格式都是一樣的
import requests
url = "https://so.csdn.net/so/search/s.do" #URL連結使用?前面的後面的都是參數
kv1 = {"User-Agent": "Mozilla/5.0"} #僞裝請求頭
kv2 = {"q": "python爬蟲-盜亦有道(二)"} #搜尋的内容
try:
r = requests.get(url, headers=kv1, params=kv2, timeout=10)
r.raise_for_status() #判斷傳回的狀态碼是否為200,不是200傳回異常
r.encoding = r.apparent_encoding #将從内容中分析出來的編碼作為輸出的編碼格式
print(r.text) #輸出内容
#print(r.url) #輸出送出的url連結,可以測試看看
except:
print("抓取失敗!")
運作結果
視訊抓取
這個例子是抓取中國大學網嵩天老師的python網絡爬蟲課程的一個視訊 “requests庫實戰”,本專欄也是根據這個課程做的筆記
首先通過開發者模式分析出網頁的視訊下載下傳連結
抓取時使用二進制形式進行儲存,同理爬取網頁的圖檔也是用二進制來下載下傳的
import requests
url = "https://jdvodrvfb210d.vod.126.net/mooc-video/nos/mp4/2017/02/28/1005856315_c9a73afe9d4b4dee8060f8cd41fc5255_sd.mp4"
#這個是儲存路徑,下面兩個分别是以連結中的名字命名和自己命名的1111.mp4,使用split方法将url連結中最後一個"/"後的名字切割出來
path = "D://軟體下載下傳//"+url.split("/")[-1]
#path = "D://軟體下載下傳//1111.mp4"
try:
r = requests.get(url)
#首先open語句,path:檔案儲存路徑,
# "wb":以二進制寫方式打開,隻能寫檔案,如果檔案不存在,建立該檔案;如果檔案已存在,先清空,再打開檔案
#然後是with-as語句,對資源進行通路時,確定不管使用過程中是否發生異常都會執行必要的“清理”操作,釋放資源,如檔案的自動關閉
with open(path, "wb") as file:
#使用requests對象content(HTTP響應内容的二進制形式),将視訊以二進制形式寫入檔案中
file.write(r.content)
print("視訊下載下傳成功!")
except:
print("抓取失敗!")
運作結果
以上均為個人學習筆記,如有錯誤請指正,共同學習,謝謝。