利用python獲取想要搜索的數(shù)據(jù)
前言
大家在日常生活中經(jīng)常需要查找不同的事物的相關(guān)信息,今天我們利用python來實(shí)現(xiàn)這一個(gè)小功能,同時(shí)呢,也是大家對基礎(chǔ)知識的一個(gè)綜合實(shí)踐,相信有不少小伙伴已經(jīng)準(zhǔn)備躍躍欲試了,話不多說,開干!
本次爬蟲思路
- 獲取url
- 通過請求拿到響應(yīng)
- 處理反爬
- 修改傳遞參數(shù)
- 完善程序
urllib庫
1.urllib庫的介紹
urllib庫是Python的標(biāo)準(zhǔn)庫,提供了一系列用于操作URL的功能,其大部分功能與requests庫類似,也有一些特別的用法。
urllib庫是Python標(biāo)準(zhǔn)庫提供的一個(gè)用戶操作URL的模塊,Python3把原來Python 2的urilib庫和Urllib 2庫合并成了一個(gè)Urllib庫,現(xiàn)在講解的就是Python3中的Urllib庫。
urllib.request——打開和讀取URL;
urllib.error——包含Urllib.request各種錯(cuò)誤的模塊;
urlib.parse——解析URL;
urllib.robotparse——解析網(wǎng)站robots.txt文件。
2.urllib庫的使用模板
import urllib.request url ='xxxxxxxxxxxx' #發(fā)送請求 request= urllib.request.Request(url,data,header) #得到響應(yīng) response=urllib.request.urlopen(request) #解碼 content = response.read().decode() #查看數(shù)據(jù) print(content)
3.使用urllib庫獲取數(shù)據(jù)
1. 獲取URL:首先使用Chrome瀏覽器打開某度網(wǎng)頁,隨便輸入一個(gè):xxx,然后打開開發(fā)者工具(右鍵檢查),切換到網(wǎng)絡(luò)界面,清空記錄,重新刷新頁面,可以看到:

如此這個(gè)URL就是我們需要獲取的URL:https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E6%B3%95%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95&fenlei=256&rsv_pq=0x8dc81b9f001c02d3&rsv_t=1c35crTFwJXLFoeU8nF33RDMyj9nX%2FofGDNqUmHapdGRlUDmKmo7610WDRno****&rqlang=en&rsv_dl=tb&rsv_sug3=7&rsv_enter=0&rsv_btype=i&inputT=2267&rsv_sug4=2878
分析:加粗的這一堆:就是法解決方法這幾個(gè)關(guān)鍵字;
2.通過請求拿到響應(yīng):直接利用模板模擬瀏覽器發(fā)起請求:

突然發(fā)現(xiàn)我們沒有拿到想要的數(shù)據(jù)。難道是我們程序?qū)戝e(cuò)了嗎?
3. 處理反爬:莫急,俗話說人靠衣服馬靠鞍,服務(wù)器就像大美女,你要打扮的帥帥的,才能獲得美女的芳心,當(dāng)然,這種方法是對于我們?nèi)藖碚f的,你可別馬上就給電腦噴香水啊,針對程序來說,我們就需要偽裝,假裝我是一個(gè)瀏覽器,那么,如何偽裝呢?我們就需要攜帶一些參數(shù),先試試這個(gè):
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36(主要是我們電腦瀏覽器的名稱,版本信息),再試一次:

成功“騙”過了服務(wù)器,這樣就拿到了數(shù)據(jù)(高興??),別著急,我們再思考一下,能不能通過修改一些參數(shù),就讓我們想找哪些數(shù)據(jù)就拿哪些數(shù)據(jù),好,接下來我們就分析它的參數(shù):
- 修改傳遞參數(shù):

wd:xx,它是這樣傳遞我們輸入的文字的,那么我們創(chuàng)造一個(gè)字典類型的鍵值對,發(fā)送請求時(shí),再將這個(gè)參數(shù)拼接上去,這樣不就實(shí)現(xiàn)了我們的需求嘛(特別注意編解碼的問題)

哈哈,這里百度第二個(gè)安全驗(yàn)證出來了,根本原因是我們攜帶的一些參數(shù)有問題,因?yàn)檫€有一些參數(shù)在變,但是對于我們?nèi)腴T的童鞋處理起來不太友好,所以常用三種方法:
1.將wd后面的參數(shù)直接去掉;(成功率不高)
2.去掉HTTPS后面的是s,使用http協(xié)議;(成功率不高)
3.使用cookie;(比較穩(wěn)定)
我選擇使用第三種:

這樣就利用urllib庫實(shí)現(xiàn)了這個(gè)小功能。別著急,更簡單的方法還在后面呢!????
4.urllib庫一些個(gè)人總結(jié)
1. urllib庫在處理一些網(wǎng)址的時(shí)候比requests庫更加快捷;
2. urllib庫涉及編解碼的問題,必須手動添加;
3. 使用起來代碼行數(shù)多,比較笨重。
是不是感覺全是缺點(diǎn),正因如此,我們的requests庫應(yīng)運(yùn)而生,簡單快捷方便,是對它最清晰的寫照,更加的人性化,接下來正式介紹這一大殺器,同時(shí)也希望大家盡量使用 requests庫來寫爬蟲(真的很好很好很好用!??)。
requests庫
5.requests庫的介紹
requests庫常用有這些功能:
1、Keep-Alive & 連接池
2、國際化域名和 URL
3、帶持久 Cookie 的會話
4、自動內(nèi)容解碼
5、優(yōu)雅的 key/value Cookie
6、Unicode 響應(yīng)體
7、HTTP(S) 代理支持
6.requests庫的使用模板
import requests url ='xxxxxxxxxxxx' #發(fā)送請求 response = request.get(url, params,headers) (get請求或者post請求) #根據(jù)響應(yīng)的格式解碼,非常智能 response.encoding=response.appareent_encoding
7.使用requests庫獲取數(shù)據(jù)
布置爬蟲的步驟在urllib庫使用的時(shí)候已經(jīng)非常詳細(xì)的解釋了,在此不在贅述,步驟相同,大家可以嘗試用模板自己寫一下(我個(gè)人的代碼放在最后了)。如果有哪里不懂得,可以在評論區(qū)留言,博主會盡全力解答。

8.requests庫一些個(gè)人總結(jié)
1. requests庫步驟簡單;
2. 各種操作方法人性化,功能更加強(qiáng)大;
3. requests 庫擁有完全自動化 Keep-alive 和 HTTP 連接池的功能,主要是突出Python的優(yōu)雅二字。
9.個(gè)人建議(附代碼)
1.部署爬蟲時(shí)要先思考好大步驟,最好能把步驟寫下來,然后一步一步逐步去寫代碼;
2.再仔細(xì)去瀏覽網(wǎng)頁,確然好你爬的信息接口是哪個(gè),是什么類型的請求,參數(shù)是什么,是存在網(wǎng)頁本身還是二次加載進(jìn)來的等等,一定要細(xì)心認(rèn)真;
3.處理反爬時(shí)一般攜帶的參數(shù)就是:User-Agent,Cookie,Accept,Host,這幾個(gè),如果還是拿不到數(shù)據(jù),那就是進(jìn)階了,暫時(shí)先不用管;
4.多觀察幾次請求,找到規(guī)律,實(shí)現(xiàn)規(guī)模式爬取(這也是爬蟲的初心)
5.優(yōu)化自己的程序,提高效率的同時(shí)又要避免被檢測出來,多思考就會有靈感。
request庫代碼:
import requests
data = input('輸入你想要查找的數(shù)據(jù):').split()
url ='http://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
'Cookie': 'BIDUPSID=CDE3B4BEE7AE0D336C4D0734E42BCF8B; PSTM=1664331801; BAIDUID=CDE3B4BEE7AE0D33996D27FED1DDB4DB:FG=1; BD_UPN=12314753; BDUSS=JNdXVzTXMyWmFKM0x1VWJ5eG9GUjg4UmVCRFQxY1dtejBPVDFBfjc0VHhYRnRqRVFBQUFBJCQAAAAAAAAAAAEAAACse3WjanNuZGJpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHPM2PxzzNjTT; BDUSS_BFESS=JNdXVzTXMyWmFKM0x1VWJ5eG9GUjg4UmVCRFQxY1dtejBPVDFBfjc0VHhYRnRqRVFBQUFBJCQAAAAAAAAAAAEAAACse3WjanNuZGJpZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHPM2PxzzNjTT; newlogin=1; ZFY=utLrULRdQjGdhXHuTriamg7jZ2PZMLmnKmUCBUiVrTw:C; BAIDUID_BFESS=CDE3B4BEE7AE0D33996D27FED1DDB4DB:FG=1; BA_HECTOR=ag04ah242k2l2h0la0010ofe1ho8t901f; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; COOKIE_SESSION=765400_1_9_9_5_15_1_0_9_7_0_0_1292084_0_0_0_1668919087_1669684425_1669684425%7C9%234656831_6_1669684425%7C3; B64_BOT=1; BDRCVFR[7FEYkXni5q3]=mk3SLVN4HKm; BD_HOME=1; H_PS_PSSID=26350; BD_CK_SAM=1; PSINO=3; delPer=1; H_PS_645EC=3d48biiwjEvDlNFtMaUHuepsRu67OxRgPoEiOrMKvfRketUwB4GowDbv4KmDa%2BaTHUgCCoc; baikeVisitId=e1f583c7-eb15-4940-a709-054666f30f48; BDSVRTM=443'
}
data = {
'wd': data
}
response = requests.get(url=url, params=data, headers=headers)
response.encoding = response.apparent_encoding
print(response.text)
以上就是利用python獲取想要搜索的數(shù)據(jù)的詳細(xì)內(nèi)容,更多關(guān)于python獲取數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python數(shù)學(xué)建模之三大模型與十大常用算法詳情
這篇文章主要介紹了python數(shù)學(xué)建模之三大模型與十大常用算法詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感想取得小伙伴可以參考一下2022-07-07
Python提取JSON格式數(shù)據(jù)實(shí)戰(zhàn)案例
這篇文章主要給大家介紹了關(guān)于Python提取JSON格式數(shù)據(jù)的相關(guān)資料, Python提供了內(nèi)置的json模塊,用于處理JSON數(shù)據(jù),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-07-07
使用Fastapi打包exe后無限啟動導(dǎo)致死機(jī)的解決辦法
將 fastapi 服務(wù)打包成 exe 后雙擊執(zhí)行,命令行中不斷創(chuàng)建服務(wù)導(dǎo)致cpu吃滿,最后死機(jī),所以本文給大家介紹了Fastapi打包exe后無限啟動導(dǎo)致死機(jī)的解決辦法,需要的朋友可以參考下2024-03-03
numpy.random.choice()函數(shù)詳解
處理數(shù)據(jù)時(shí)我們經(jīng)常需要從數(shù)組中隨機(jī)抽取元素,這時(shí)候我們可以考慮使用np.random.choice()函數(shù),這篇文章主要介紹了numpy.random.choice()函數(shù),需要的朋友可以參考下2023-05-05
python 尋找優(yōu)化使成本函數(shù)最小的最優(yōu)解的方法
這篇文章主要介紹了python 尋找優(yōu)化使成本函數(shù)最小的最優(yōu)解的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
python獲取指定字符串中重復(fù)模式最高的字符串方法
今天小編就為大家分享一篇python獲取指定字符串中重復(fù)模式最高的字符串方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Pandas:Series和DataFrame刪除指定軸上數(shù)據(jù)的方法
今天小編就為大家分享一篇Pandas:Series和DataFrame刪除指定軸上數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
人工智能-Python實(shí)現(xiàn)多項(xiàng)式回歸
這篇文章主要介紹了人工智能-Python實(shí)現(xiàn)多項(xiàng)式回歸,上一次我們講解了線性回歸,這次我們重點(diǎn)分析多項(xiàng)式回歸,需要的小伙伴可以參考一下2022-01-01

