python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...
從這周開始,每周來一個爬蟲小教程,希望對你們有所幫助,這次的目標是B站排行榜至于爬取什么內容,目前感覺就把序號,名稱以及評分爬取下來吧(因為我是邊寫教程邊寫代碼的)
這次需要用到的知識:Requests模塊
Xpath模塊(說白了就是Html)
有看我的博客:www.lanol.cn
首先來到這個頁面https://www.bilibili.com/ranking/all/0/0/1,目前是全站榜,我們嘗試切換到原創榜,就會發現網址欄對應的網址改變了,所以我們只需要修改網址就可以獲取想要的榜單(我不確定會不會每天都變,沒觀察)
然后改變這個投稿類型和日期網址也會改變到這里我們就已經獲取到想要爬取的網址了。request中的url也就確定了。url = ‘https://www.bilibili.com/ranking/all/0/0/1’
我們按快捷鍵Ctrl+U,查看源代碼,然后搜索一下排行第一的視頻。我們可以發現在源代碼里面有,這樣的話我們就可以直接用requests模塊獲取源碼,再利用Xpath解析網頁了。有關Xpath的時候方法可以看這篇文章Python爬蟲:Xpath語法筆記。
然后來開始寫代碼,第一步永遠都不會變的,先導入Requests模塊和將網頁源碼轉換為可以Xpath的模塊(這兩個模塊如果沒有可以pip一下,博客內也有教程,搜索即可)import requests
import parsel
然后就是做一個請求頭(偽裝成普通瀏覽器去訪問),一般來說剛開始只加一個user-agent就可以了,如果有反爬機制,再去加。
請求頭也就是這一塊我們一開始只放一個user-agent進去
user-agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) ApplewebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36
我們復制下來之后是上面這樣的,然后我們要轉換成python里面字典的格式。也就是加個引號就行了。'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
然后放到Python代碼中就是這樣子的。headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
這樣requests模塊中的headers就構造好了
然后就是寫上這一句就可以獲取到源碼了。response = requests.get(url=url, headers=headers).text
這句話的意思就是調用requests模塊,然后get請求這個url,最后將獲取到的內容取text格式然后賦值給response。
我們來執行看一下,不要忘記輸出一下哦。
這樣子我們的頁面源碼就獲取到了,而且里面可以看到我們之前搜索的排行第一的視頻:【官方MV】Mojito - 周杰倫。
然后我們回到網站,右鍵視頻標題,點擊檢查。我們再在源碼這右鍵一下,點擊Copy,點擊Copy Xpath,這樣Xpath就復制下來了,動畫演示:原文地址:www.lanol.cn
//*[@id="app"]/div[1]/div/div[1]/div[2]/div[3]/ul/li[1]/div[2]/div[2]/a
我們將這句Xpath粘貼到瀏覽器插件里面測試一下。
可以看見我們已經可以選中這句標題了,然后我們再利用HTML知識修改一下這句話,就可以獲取到所有標題了。//div[2]/div[2]/a
我們放到Python里面執行一下。
發現獲取的內容似乎有點多,這里不僅把標題弄出來了,而且還將這句代碼弄出來了,我們在后面加一個text()只獲取文本內容。
這樣就可以了,我們再來試一下獲取分數。一如之前的操作,右鍵分數,點擊檢查,再在代碼處右鍵,點擊Copy,點擊Copy Xpath。//*[@id="app"]/div[1]/div/div[1]/div[2]/div[3]/ul/li[20]/div[2]/div[2]/div[2]/div
再修改一下這句話,以獲取我們想要的全部內容。//div[2]/div[2]/div[2]/div/text()
然后放到Python里面執行一下。
成功獲取所有分數。
綜上我們想要獲取的信息都已經取到了。
然后就是寫到表格之中,這里為了方便直接寫到csv即可。直接貼代碼了。with open('B站排行榜www.lanol.cn.csv', 'w') as f:
f.write('標題,分數\n')
for index, i in enumerate(titles):
f.write(f'{i},{grades[index]}\n')
這樣子,就可以了,這個只是一個思路,獲取更多信息你可以自由發揮。
所有代碼一共才17行,人生苦短,Python當歌,其實其他語言也可以,只是麻煩了一點而已。
所有代碼如下:
[CommShow]import parsel
import requests
url = 'https://www.bilibili.com/ranking/all/0/0/1'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}
response = requests.get(url=url, headers=headers).text
response = parsel.Selector(response)
# www.lanol.cn Lan的小站
titles = response.xpath('//div[2]/div[2]/a/text()').extract()
grades = response.xpath('//div[2]/div[2]/div[2]/div/text()').extract()
with open('B站排行榜www.lanol.cn.csv', 'w') as f:
f.write('標題,分數\n')
for index, i in enumerate(titles):
f.write(f'{i},{grades[index]}\n')
print(grades)
[/CommShow]
總結
以上是生活随笔為你收集整理的python爬取b站排行榜_实时爬取B站排行榜并保存为表格——每周一个爬虫小教程系列...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 获取header_php 输出4
- 下一篇: linux 系统盘无法ls,系统故障排除