基本的思路很簡單,還是老步驟:
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。我們需要的資料是電影的類別編碼和電影類別名稱。規則分析...