系列文章目錄
編程小白的自學筆記八(python中的多線程)
編程小白的自學筆記七(python中類的繼承)?
?編程小白的自學筆記六(python中類的靜態(tài)方法和動態(tài)方法)?
編程小白的自學筆記五(Python類的方法)?
編程小白的自學筆記四(正則表達式模塊search函數(shù))?
目錄
-
系列文章目錄
前言
一、使用get方法請求數(shù)據(jù)
二、爬取酷狗音樂排行榜
總結(jié)
前言
很多小白都是聽說python可以很好的編寫爬蟲腳本慕名而來,我也是,終于學到爬蟲部分了,前面的html語言,客戶端和服務(wù)器的交互等基礎(chǔ)就不贅述了,直接進入主題。
一、使用get方法請求數(shù)據(jù)
開發(fā)網(wǎng)絡(luò)爬蟲需要第三方模塊requests,我們需要安裝,語法如下:
Pip install requests
安裝完成后,使用其中的get方法就可以返回結(jié)果,其功能等同于我們在瀏覽器輸入網(wǎng)址,然后服務(wù)器返回一個頁面給我們一樣?。
requests庫的get方法是用于向服務(wù)器發(fā)送GET請求的。它的完整參數(shù)如下:
- url:請求的URL地址。
- params:查詢字符串,用于傳遞參數(shù)。
- headers:請求頭信息。
- cookies:Cookie信息。
- proxies:代理服務(wù)器地址。
- timeout:超時時間。
- verify:是否驗證SSL證書。
?下面我們看一個小例子:
import requests
url = 'http://www.baidu.com'
try:
req = requests.get(url)
print(req.text)
except:
print('查詢失敗')
代碼還是很簡單的,返回的結(jié)果是:
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
返回的內(nèi)容比較多,我刪除了中間的一些代碼,這個就是網(wǎng)站的源碼。我可以看出,只要給get方法傳遞一個url地址就行。?
二、爬取酷狗音樂排行榜
下面就進入真正的實戰(zhàn)了,爬取酷狗音樂排行榜數(shù)據(jù),網(wǎng)址是酷狗TOP500_排行榜_樂庫頻道_酷狗網(wǎng),可以看到網(wǎng)頁上對歌曲進行了排名。
?
我們右擊鼠標打開檢查選項,可以找到歌曲信息在Html中的位置,可以看出歌曲名稱和演唱者都在<li>元素的title屬性中,如果我們通過get方法獲取了網(wǎng)頁的全部內(nèi)容,就可以使用正則表達式提取出我們需要的信息。
?
下面是實戰(zhàn)代碼
import requests
import re
url = 'https://www.kugou.com/yy/rank/home/1-8888.html'
try:
req = requests.get(url)
songs = re.findall(r'<li.*?title="(.*?)".*?>',req.text)
for song in songs:
print(song)
except:
print('查詢失敗')
?程序運行成功,但不是我們想要的結(jié)果,返回的是空,也就是說沒有匹配到結(jié)果,為此,我增加了代碼print(req.text),看看我們獲取到的返回結(jié)果是什么。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>403 Forbidden</title> <style type="text/css">body{margin:5% auto 0 auto;padding:0 18px}.P{margin:0 22%}.O{margin-top:20px}.N{margin-top:10px}.M{margin:10px 0 30px 0}.L{margin-bottom:60px}.K{font-size:25px;color:#F90}.J{font-size:14px}.I{font-size:20px}.H{font-size:18px}.G{font-size:16px}.F{width:230px;float:left}.E{margin-top:5px}.D{margin:8px 0 0 -20px}.C{color:#3CF;cursor:pointer}.B{color:#909090;margin-top:15px}.A{line-height:30px}.hide_me{display:none}</style> </head> <body> <div id="p" class="P"> <div class="K">403</div> <div class="O I">Forbidden</div> <p class="J A L">Error Times: Fri, 23 Jun 2023 06:40:43 GMT <br> <span class="F">IP: 60.174.21.124</span>Node information: CS-000-01uyG161 <br>URL: https://www.kugou.com/yy/rank/home/1-8888.html <br>Request-Id: 64953e6b_CS-000-01uyG161_35678-151 <br> <br>Check: <span class="C G" onclick="s(0)">Details</span></p> </div> <div id="d" class="hide_me P H"> <div class="K">ERROR</div> <p class="O I">The Requested URL could not be retrieved</p> <div class="O"> <div>While trying to retrieve the URL:</div> <pre class="B G">https://www.kugou.com/yy/rank/home/1-8888.html</pre></div> <div class="M"> <span>The following error was encountered:</span> <ul class="E"> <li class="D G">Invalid Request</li></ul> </div> <p class="M">The access control configuration prevents your request at this time. <p></p>Please contact your service provider if you feel this is incorrect.</p> <a class="N C" href="#" onclick="s(1)">return</a></div> <script type="text/javascript">function e(i) { return document.getElementById(i); } function d(i, t) { e(i).style.display = (t ? 'block': 'none'); } function s(e) { d('p', e); d('d', !e); }</script> </body> </html>
可以看到,并沒有歌手和歌曲內(nèi)容,應(yīng)該是搜狗網(wǎng)站進行了一些反爬。于是我們在get里面加上headers={'user-agent':'chrome'},來模擬瀏覽器訪問,代碼如下:?
import re
url = 'https://www.kugou.com/yy/rank/home/1-8888.html'
try:
req = requests.get(url,headers={'user-agent':'chrome'})
# print(req.text)
songs = re.findall(r'<li.*?title="(.*?)"',req.text)
for song in songs:
print(song)
except:
print('查詢失敗')
這次成功返回我們要的結(jié)果:
蘇星婕 - 聽悲傷的情歌
指尖笑 - 不問ciaga
郭頂 - 凄美地
一只白羊 - 等不到的你
任夏 - 悲傷的愛情
張靚穎、王赫野 - 是你 (Live)
Mae Stephens - If We Ever Broke Up (Explicit)
Kui Kui - 寶貝在干嘛
張紫豪 - 可不可以
周杰倫 - 說好的幸福呢
周杰倫 - 晴天
汪蘇瀧、吉克雋逸 - Letting Go (Live)
承桓 - 我會等
蔡健雅 - Letting Go
任夏 - 失眠情歌 (Live合唱版)
蘇星婕 - 吹著晚風想起你
周杰倫 - 我落淚情緒零碎
云狗蛋 - 天若有情
程響 - 可能
A-Lin - 天若有情
RE-D、是二哈ya、masta - 肯定
G.E.M. 鄧紫棋 - 喜歡你
我們來詳細分析下:
- 用get方法獲取網(wǎng)頁內(nèi)容。這個內(nèi)容和最開始介紹的內(nèi)容一樣,get方法向服務(wù)器發(fā)送請求,服務(wù)器返回數(shù)據(jù)。
- 增加headers參數(shù)。我們第一次沒有得到想要的結(jié)果,是網(wǎng)站增加了限制,目的就是用來驗證請求是不是正常瀏覽器發(fā)出的,第一次我們的請求明顯被服務(wù)器發(fā)現(xiàn)不正常了,于是我們增加了headers參數(shù),內(nèi)容為{'user-agent':'chrome'},意思就是瀏覽器類型為谷歌瀏覽器,這下騙過了服務(wù)器。
- 使用正則匹配我們想要的結(jié)果。使用正則我們需要先導入re模塊,原始網(wǎng)頁內(nèi)容為<li class=" " title="蘇星婕 - 聽悲傷的情歌" data-index="0" data-eid="8id4200b">,那么我們只需要匹配以<li開頭,內(nèi)含有title=""的語句就行,那就可以這樣寫正則表達式<li.*?title="(.*?)",.*?代表除換行以外的其他元素,表達式的返回結(jié)果是子表達式的內(nèi)容,正好是歌手加歌曲。
總結(jié)
requests庫是一個Python的第三方庫,用于發(fā)送HTTP請求。它提供了簡單易用的API,可以方便地實現(xiàn)各種HTTP請求操作,如GET、POST、PUT、DELETE等。
requests庫的主要特點如下:
1. 簡單易用:requests庫的API設(shè)計簡潔明了,易于上手使用。
2. 靈活性高:requests庫支持多種HTTP請求方法和參數(shù)設(shè)置,可以根據(jù)需要進行靈活配置。
3. 性能優(yōu)異:requests庫采用了高效的HTTP協(xié)議解析器和連接池技術(shù),可以提高請求的響應(yīng)速度和穩(wěn)定性。
4. 支持多種數(shù)據(jù)格式:requests庫可以處理JSON、XML、HTML等多種數(shù)據(jù)格式,并提供了豐富的解析器和轉(zhuǎn)換器。
5. 跨平臺兼容性好:requests庫可以在Windows、Linux、Mac OS等多個操作系統(tǒng)上運行,并且支持Python 2.x和Python 3.x版本。文章來源:http://www.zghlxwxcb.cn/news/detail-595472.html總之,requests庫是一個非常實用的HTTP請求工具,可以幫助開發(fā)者快速實現(xiàn)各種網(wǎng)絡(luò)請求操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-595472.html
到了這里,關(guān)于編程小白的自學筆記九(python爬蟲入門+代碼詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!