04. requests模块入门与三个案例(搜狗搜索/百度翻译/豆瓣电影)
目錄
前言
requests的安裝
1. cmd中輸入安裝
2. PyCharm中運(yùn)行安裝
3. Anaconda虛擬環(huán)境中安裝
4. 檢查是否安裝成功
案例1. 抓取搜狗搜索內(nèi)容
案例2 利用百度翻譯網(wǎng)站制作一個(gè)自己的翻譯小程序
案例3 豆瓣電影高分排行榜讀取
總結(jié)
前言
在前面小節(jié)中,我們使用urllib來抓取頁面源代碼,這是python內(nèi)置的一個(gè)模塊,但它并不是我們常用的爬蟲工具。
常用的抓取頁面的模塊是第三方模塊——requests。這個(gè)模塊的優(yōu)勢就是比urllib還要簡單,并且處理各種請求都很方便。
requests的安裝
既然是第三方模塊,那就需要我們對該模塊進(jìn)行安裝,安裝方法:
1. cmd中輸入安裝
① 按下win+R,輸入cmd,按下回車
② 輸入pip install requests
如果安裝速度慢的話可以改用國內(nèi)鏡像源安裝:
2. PyCharm中運(yùn)行安裝
如果安裝速度慢的話可以改用國內(nèi)鏡像源安裝:
3. Anaconda虛擬環(huán)境中安裝
① 打開Anaconda 3 Prompt
② 創(chuàng)建一個(gè)虛擬環(huán)境(如果有則跳過這步)
輸入conda create -n 環(huán)境名 python=X.X,按下回車
?等待后出現(xiàn)下面的界面,輸入y,回車
等待后可以看到已經(jīng)創(chuàng)建成功
③ 激活虛擬環(huán)境
輸入conda activate 環(huán)境名,或者輸入activate 環(huán)境名
輸入pip install requests
如果安裝速度慢的話可以改用國內(nèi)鏡像源安裝:
pip install requests -i?https://pypi.tuna.tsinghua.edu.cn/simple requests
還可以用conda安裝,輸入conda install requests
?輸入y,回車
等待后出現(xiàn)done,安裝成功。
4. 檢查是否安裝成功
① 可以在py文件中import requests看是否報(bào)錯(cuò)
② 可以在3.中提到的幾種方法里輸入pip list回車查看已安裝庫函數(shù)列表(以Anaconda為例)
可以看到requests已經(jīng)在我們的已安裝列表中了,安裝完成。?
案例1. 抓取搜狗搜索內(nèi)容
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后的參數(shù),即headers進(jìn)行修飾 resp = requests.get(url, headers=ua) # 處理一個(gè)小小的反爬print(resp) print(resp.text) # 拿到頁面源代碼 resp.close()其中,url可以自行修改,想獲取哪個(gè)搜索界面的源代碼,就從哪個(gè)頁面復(fù)制來網(wǎng)頁url;
ua,即User-Agent,需要從上一節(jié)提到的響應(yīng)頭中粘貼自己的ua。
第9/10行代碼處理了一個(gè)小小的反爬,可以將我們的py程序發(fā)出請求的ua(即用戶代理)“偽裝”成正常的瀏覽器,而非編程軟件。
案例2 利用百度翻譯網(wǎng)站制作一個(gè)自己的翻譯小程序
import requestsurl = "https://fanyi.baidu.com/sug"s = input("請輸入你要翻譯的英文單詞:") dat = {"kw": s }# 發(fā)送post請求,發(fā)送的數(shù)據(jù)必須放在字典中,通過data參數(shù)進(jìn)行傳遞 resp = requests.post(url, data=dat) # print(resp.text) # 這樣中文會出現(xiàn)代碼,不利于提取數(shù)據(jù) resp_json = resp.json() # 將服務(wù)器返回的內(nèi)容直接處理成json() => 也即python中的字典dict print(resp_json['data'][0]['v']) # 拿到返回字典的內(nèi)容 resp.close()此代碼不用更改,可以直接使用。
注意?https://fanyi.baidu.com/sug?這個(gè)url,通過F12可以得知,它是通過post方式提交的,所以我們也要模擬post請求,使用requests.post()這個(gè)api,返回到resp中,再將返回的數(shù)據(jù)直接處理成json數(shù)據(jù)(相當(dāng)于Python中的字典)。直接打印這個(gè)json,信息比較多比較復(fù)雜,觀感差。我們選擇性打印對應(yīng)需要的內(nèi)容就可以顯示我們想要的翻譯結(jié)果了,觀看較好~
運(yùn)行示例:
可以看到已經(jīng)完美“搬運(yùn)”了百度翻譯的結(jié)果!對于我們初學(xué)者還是很有成就感的~?
案例3 豆瓣電影高分排行榜讀取
import requests# url = "https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20" # 參數(shù)太多太復(fù)雜,用f{}替換太繁瑣url = "https://movie.douban.com/j/chart/top_list" # 重新封裝參數(shù) 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,因?yàn)楸环磁懒?resp = requests.get(url=url, params=param, headers=headers)print(resp.request.url) # 顯示實(shí)際訪問的網(wǎng)頁,即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() # 關(guān)掉resp,否則可能出現(xiàn)請求口堵死的情況這里我們用了一個(gè)巧妙的地方,因?yàn)榭吹皆镜膗rl太長太復(fù)雜太繁瑣,所以我們就另辟蹊徑,重新封裝了一組參數(shù),也就是把top_list后面的參數(shù)都封裝進(jìn)param里,便于我們后續(xù)修改。
headers也就是我們之前提到的ua,可以自行修改參數(shù)名,這個(gè)無所謂的~
這里我們用的是get方式請求,和案例2不同。其實(shí)也很好理解,我們之前提到過,post是上傳修改,get是獲取下載,所以百度翻譯需要post我們想要翻譯的詞語,而豆瓣電影網(wǎng)需要get我們想要獲取的信息。
在get請求中,我們的param封裝的內(nèi)容會自動添加到url后面,自動拼接成我們最開始看到的那個(gè)冗長的代碼!其實(shí)我們start的作用就是從第幾名開始。limit的作用就是一次查詢幾名,知道這兩個(gè)條件以后其實(shí)可以寫一個(gè)循環(huán),循環(huán)n次從而執(zhí)行出豆瓣電影前20n的排名詳情。
總結(jié)
本節(jié)我們學(xué)會了requests模塊的安裝,成功編寫了三個(gè)簡單的爬蟲案例,認(rèn)識了兩種不同請求方式的requests用法,增添了學(xué)習(xí)興趣,增強(qiáng)了編程的自信心,希望大家可以和我一起共同進(jìn)步,一起努力~
總結(jié)
以上是生活随笔為你收集整理的04. requests模块入门与三个案例(搜狗搜索/百度翻译/豆瓣电影)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北信源内网安全管理管理系统
- 下一篇: 6. 调整图像亮度和对比度(OpenCV