手把手教你爬取B站彈幕!

2022-05-05 18:09:09 字數 2374 閱讀 6044

基本的思路很簡單,還是老步驟:

1、構造爬取的url

2、解析返回的資料

3、使用json或xpath或正規表示式提取資料

4、儲存資料

剛開始還是從網頁版中尋找url位址,結果請求很多,找了半天也沒有找到

於是我們可以訪問一下手機版的頁面,而根據常識,彈幕這種東西一般是通過ajax來請求的,所以我們過濾一下,只看非同步請求。

很顯然這是構造出來的位址,我們點進去看一下

不出所料是js構成的請求位址,我們可以發現這便是頁面的資料,我們進一步去驗證一下,重新整理頁面,檢視一下網頁的資料。

果然在該頁面的文件中我們找到了

現在思路就很清晰了

2、爬取彈幕檔案url

3、提取資料

# coding=utf-8

import requests

from lxml import etree

import re

class bilispider:

def __init__(self,bv):

self.bvurl = ""+bv

def getxml_url(self):

response = requests.get(self.bvurl, headers = self.headers)

html_str = response.content.decode()

# 使用正則找出該彈幕位址

# 格式為:

# 我們分隔出的是位址中的彈幕檔名,即 168087953

getword_url = re.findall(" ''+ (.*) +'.xml',", html_str)

getword_url = getword_url[0].replace("+","").replace(" ","")

# 組裝成要請求的xml位址

# xpath不能解析指明編碼格式的字串,所以此處我們不解碼,還是二進位制文字

def parse_url(self,url):

response = requests.get(url,headers = self.headers)

return response.content

# 彈幕包含在xml中的中,取出即可

def get_word_list(self,str):

html = etree.html(str)

word_list = html.xpath("//d/text()")

return word_list

def run(self):

# 1.根據bv號獲取彈幕的位址

start_url = self.getxml_url()

# 2.請求並解析資料

xml_str = self.parse_url(start_url)

word_list = self.get_word_list(xml_str)

# 3.列印

for word in word_list:

print(word)

if __name__ == '__main__':

spider = bilispider(bvname)

spider.run()

這裡只列印了彈幕,並沒有儲存,可以根據自己的需求進行更改!

手把手教你用Python爬取p站

首先開啟我們的p站進行抓包 不好意思,不好意思 輸錯了 我們今天要爬取的內容是p站的排行榜 在我們往下滑的時候進行抓包會發現有個包 這是乙個ajax請求,就是獲取排行榜頁面的包 如下 import requests from lxml import etree import time 進行ua偽裝 ...

爬取B站彈幕

最近幾天學習爬蟲,便爬取了b站的彈幕,本篇博文記錄的是爬取彈幕的方法一,近期會更新方法二。下面是流程 點開這個包是這個形式的 這裡面就有明文的彈幕,但通過requests獲得的response是經過utf 8編碼加密過的,想要獲得彈幕內容還要解密。下面附 from bs4 import beauti...

手把手教你爬取優酷電影資訊 2

部落格 沉澱 分享 成長,讓自己和他人都能有所收穫!上一章節中我們實現了對優酷單頁面的爬取,簡單進行回顧一下,使用htmlagilitypack庫,對爬蟲的爬取一共分為三步 使用chrome瀏覽器,f12,找到當前位置,得到當前位置的xpath。我們需要的資料是電影的類別編碼和電影類別名稱。規則分析...