天天看點

python爬蟲-Requests庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取

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("抓取失敗!")      #異常處理
           

運作結果

python爬蟲-Requests庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取

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("抓取失敗!")                             #異常處理
           

運作結果

python爬蟲-Requests庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取

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庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取

視訊抓取

這個例子是抓取中國大學網嵩天老師的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("抓取失敗!")
           

運作結果

python爬蟲-Requests庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取
python爬蟲-Requests庫爬取實戰(三)擷取電腦IP位址58同城爬取scdn部落格搜尋視訊抓取
以上均為個人學習筆記,如有錯誤請指正,共同學習,謝謝。