04. requests模块入门与三个案例(搜狗搜索/百度翻译/豆瓣电影)
目錄
前言
requests的安裝
1. cmd中輸入安裝
2. PyCharm中運行安裝
3. Anaconda虛擬環境中安裝
4. 檢查是否安裝成功
案例1. 抓取搜狗搜索內容
案例2 利用百度翻譯網站制作一個自己的翻譯小程序
案例3 豆瓣電影高分排行榜讀取
總結
前言
在前面小節中,我們使用urllib來抓取頁面源代碼,這是python內置的一個模塊,但它并不是我們常用的爬蟲工具。
常用的抓取頁面的模塊是第三方模塊——requests。這個模塊的優勢就是比urllib還要簡單,并且處理各種請求都很方便。
requests的安裝
既然是第三方模塊,那就需要我們對該模塊進行安裝,安裝方法:
1. cmd中輸入安裝
① 按下win+R,輸入cmd,按下回車
② 輸入pip install requests
如果安裝速度慢的話可以改用國內鏡像源安裝:
2. PyCharm中運行安裝
如果安裝速度慢的話可以改用國內鏡像源安裝:
3. Anaconda虛擬環境中安裝
① 打開Anaconda 3 Prompt
② 創建一個虛擬環境(如果有則跳過這步)
輸入conda create -n 環境名 python=X.X,按下回車
?等待后出現下面的界面,輸入y,回車
等待后可以看到已經創建成功
③ 激活虛擬環境
輸入conda activate 環境名,或者輸入activate 環境名
輸入pip install requests
如果安裝速度慢的話可以改用國內鏡像源安裝:
pip install requests -i?https://pypi.tuna.tsinghua.edu.cn/simple requests
還可以用conda安裝,輸入conda install requests
?輸入y,回車
等待后出現done,安裝成功。
4. 檢查是否安裝成功
① 可以在py文件中import requests看是否報錯
② 可以在3.中提到的幾種方法里輸入pip list回車查看已安裝庫函數列表(以Anaconda為例)
可以看到requests已經在我們的已安裝列表中了,安裝完成。?
案例1. 抓取搜狗搜索內容
import requestsurl = 'https://www.so.com/s?ie=utf-8&src=dlm_b_cube&shb=1&hsid=0d7b9150b571cec3&ls=n144c1cd899&ssid=&q=周杰倫'ua = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.54" }# resp = requests.get(url) # 這樣可能造成攔截,被識別出爬蟲程序,需要用User-Agent后的參數,即headers進行修飾 resp = requests.get(url, headers=ua) # 處理一個小小的反爬print(resp) print(resp.text) # 拿到頁面源代碼 resp.close()其中,url可以自行修改,想獲取哪個搜索界面的源代碼,就從哪個頁面復制來網頁url;
ua,即User-Agent,需要從上一節提到的響應頭中粘貼自己的ua。
第9/10行代碼處理了一個小小的反爬,可以將我們的py程序發出請求的ua(即用戶代理)“偽裝”成正常的瀏覽器,而非編程軟件。
案例2 利用百度翻譯網站制作一個自己的翻譯小程序
import requestsurl = "https://fanyi.baidu.com/sug"s = input("請輸入你要翻譯的英文單詞:") dat = {"kw": s }# 發送post請求,發送的數據必須放在字典中,通過data參數進行傳遞 resp = requests.post(url, data=dat) # print(resp.text) # 這樣中文會出現代碼,不利于提取數據 resp_json = resp.json() # 將服務器返回的內容直接處理成json() => 也即python中的字典dict print(resp_json['data'][0]['v']) # 拿到返回字典的內容 resp.close()此代碼不用更改,可以直接使用。
注意?https://fanyi.baidu.com/sug?這個url,通過F12可以得知,它是通過post方式提交的,所以我們也要模擬post請求,使用requests.post()這個api,返回到resp中,再將返回的數據直接處理成json數據(相當于Python中的字典)。直接打印這個json,信息比較多比較復雜,觀感差。我們選擇性打印對應需要的內容就可以顯示我們想要的翻譯結果了,觀看較好~
運行示例:
可以看到已經完美“搬運”了百度翻譯的結果!對于我們初學者還是很有成就感的~?
案例3 豆瓣電影高分排行榜讀取
import requests# url = "https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20" # 參數太多太復雜,用f{}替換太繁瑣url = "https://movie.douban.com/j/chart/top_list" # 重新封裝參數 param = {"type": "24","interval_id": "100:90","action": "","start": 0,"limit": 20, }headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.54" } # resp = requests.get(url=url, params=param) #還需重新裝填headers,因為被反爬了 resp = requests.get(url=url, params=param, headers=headers)print(resp.request.url) # 顯示實際訪問的網頁,即url+?+params # print(resp.text) # 什么都不顯示說明被反爬了,首先要檢查UA # print(resp.request.headers) # 檢查headers是否有問題 #{'User-Agent': 'python-requests/2.27.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'} print(resp.json())# start的作用:從top幾開始 # limit的作用:一次查詢幾名resp.close() # 關掉resp,否則可能出現請求口堵死的情況這里我們用了一個巧妙的地方,因為看到原本的url太長太復雜太繁瑣,所以我們就另辟蹊徑,重新封裝了一組參數,也就是把top_list后面的參數都封裝進param里,便于我們后續修改。
headers也就是我們之前提到的ua,可以自行修改參數名,這個無所謂的~
這里我們用的是get方式請求,和案例2不同。其實也很好理解,我們之前提到過,post是上傳修改,get是獲取下載,所以百度翻譯需要post我們想要翻譯的詞語,而豆瓣電影網需要get我們想要獲取的信息。
在get請求中,我們的param封裝的內容會自動添加到url后面,自動拼接成我們最開始看到的那個冗長的代碼!其實我們start的作用就是從第幾名開始。limit的作用就是一次查詢幾名,知道這兩個條件以后其實可以寫一個循環,循環n次從而執行出豆瓣電影前20n的排名詳情。
總結
本節我們學會了requests模塊的安裝,成功編寫了三個簡單的爬蟲案例,認識了兩種不同請求方式的requests用法,增添了學習興趣,增強了編程的自信心,希望大家可以和我一起共同進步,一起努力~
總結
以上是生活随笔為你收集整理的04. requests模块入门与三个案例(搜狗搜索/百度翻译/豆瓣电影)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北信源内网安全管理管理系统
- 下一篇: vnc 红帽linux版下载,redha