五步帶你探究爬蟲爬取視頻彈幕背后的真相艾杏,附爬蟲實現(xiàn)源碼

前言

好久沒更新,不知道各位粉絲有沒有等著急盅藻,沒辦法购桑,這不是要到年底了啊畅铭,又要開始準(zhǔn)備一年一度的工作匯報了,咱到現(xiàn)在也不知道這玩意到底有什么用勃蜘,反正就是每一家公司都需要這么個玩意硕噩,其中,最讓我頭疼的就是這個未來展望的環(huán)節(jié)缭贡,我要是能預(yù)測未來我不早就去買彩票發(fā)大財炉擅,還在這給你寫什么規(guī)劃。但是誰讓你是老大呢阳惹,哎谍失,所以,沒辦法莹汤,就是從網(wǎng)上各種找資料或者一些數(shù)據(jù)快鱼,寫未來的規(guī)劃,正好的体啰,反正也是年底了攒巍,沒啥事干,閑著也是閑著荒勇,就接了幾個兼職的單子,賺點錢回家給小輩發(fā)紅包拔偶帷沽翔!不知道大家有沒有遇到這樣的困境

再網(wǎng)上查找一些資料的時候,發(fā)現(xiàn)在網(wǎng)上對于python爬蟲的案例講解比較少窿凤,并且比較散仅偎,反正最近我從網(wǎng)上找資料,甚至是兼職的單子都是跟爬蟲相關(guān)雳殊,今天就給大家簡單介紹一下爬蟲的相關(guān)內(nèi)容橘沥,大家沒啥事也可以自己練習(xí)著玩一下嘛

公眾號:Java架構(gòu)師聯(lián)盟

開發(fā)環(huán)境

開發(fā)工具:pycharm

開發(fā)環(huán)境:python3.8.5

原理講解

其實說起來爬蟲,簡單點的理解夯秃,就是我們要去將我們在網(wǎng)頁上查看的內(nèi)容中的某一部分保存到本地座咆,為什么這么說呢?

舉個例子仓洼,大家都知道介陶,我們在瀏覽器上瀏覽某個網(wǎng)站信息的時候,其實他是去后臺請求相應(yīng)的數(shù)據(jù)色建,然后哺呜,后臺服務(wù)器相應(yīng)這個數(shù)據(jù)請求,將數(shù)據(jù)返回到我們的前端界面(也就是你能看到的業(yè)面)箕戳,如果這么說有點復(fù)雜的話某残,那結(jié)合一張圖我們來看一下

img

這個過程通俗點來說就是:

瀏覽器提交請求->下載網(wǎng)頁代碼->解析/渲染成頁面

而爬蟲要做的其實就很簡單了国撵,也很好理解,既然你在瀏覽器中查看某些信息的時候玻墅,是執(zhí)行的一個和服務(wù)器之間進(jìn)行通信的過程卸留,那你現(xiàn)在要求的不就是模擬瀏覽器的一個行為路翻,然后將數(shù)據(jù)存儲到本地嗎桑腮?

流程如下:

模擬瀏覽器發(fā)送請求->下載網(wǎng)頁代碼->只提取有用的數(shù)據(jù)->存放于數(shù)據(jù)庫或文件中

用一張圖解釋就是下面這樣的** **

img

實現(xiàn)流程

既然前面我們整理清楚了爬蟲的一個工作原理,接下來不就簡單了啊厦取,我們就是看一下代碼實現(xiàn)流程赏酥,寫代碼是最沒有技術(shù)含量的

第一喳整、獲取數(shù)據(jù)的請求地址

因為現(xiàn)在是我們要模擬瀏覽器的一個行為,那我們最起碼要知道數(shù)據(jù)的一個請求地址裸扶。也就是url框都,我今天提供給大家的源碼時爬取B站彈幕,那我就以此為例進(jìn)行講解

那url我們該怎么查找呵晨,首先魏保,前面的時候我說了,我們在前面說了摸屠,我們要先模擬一個網(wǎng)站發(fā)起一個request請求谓罗,那我們要去查看的應(yīng)該就是一個request的url

注:什么是request

使用http庫向目標(biāo)站點發(fā)起請求,即發(fā)送一個Request
Request包含:請求頭季二、請求體等
?</pre>

img

我們按F12打開開發(fā)者模式檩咱,然后在頁面中點擊彈幕列表,在選擇要查看的彈幕日期之后胯舷,在下方控制臺中會出現(xiàn)一個history開頭的選項刻蚯,點擊,我們會看到request url的選項

第二桑嘶、模擬用戶請求

主要包括兩個方面炊汹,用戶模擬以及登陸模擬

用戶模擬

因為我們現(xiàn)在是模擬瀏覽器向服務(wù)器發(fā)起請求,就好像有一個陌生人來敲你家的門一樣逃顶,這樣的情況讨便,你會開門嗎?不會口蝠,那如果我們偽裝成親戚朋友的話器钟,你就開門了把,在請求中妙蔗,我們有一個用戶代理(user-agent)來表明我們的身份選項** **

注:

User Agent中文名為用戶代理傲霸,簡稱 UA,它是一個特殊字符串頭,使得服務(wù)器能夠識別客戶使用的操作系統(tǒng)及版本昙啄、CPU 類型穆役、瀏覽器及版本、瀏覽器渲染引擎梳凛、瀏覽器語言耿币、瀏覽器插件等。

img

登陸模擬

上面的問題解決了韧拒,同時也引出了下一個問題淹接,我們在進(jìn)行這個信息查看的時候,是通過一個已經(jīng)登陸的賬號叛溢,當(dāng)你在未登陸的情況下** **

img

你是無法查看這個歷史的彈幕數(shù)據(jù)的塑悼,那我們在模擬的時候如何模式登陸行為的呢

這個時候,不得不提的就是瀏覽器的一個行為楷掉,當(dāng)我們登錄某個網(wǎng)站之后厢蒜,再次訪問的時候,很多時候是不需要再次登錄的烹植,那這是為什么呢斑鸦?是因為當(dāng)你登錄之后,瀏覽器會在本地生成一個cookie的問題件草雕,cookie與特定的 Web 文檔關(guān)聯(lián)在一起, 保存了該客戶機(jī)訪問這個Web 文檔時的信息, 當(dāng)客戶機(jī)再次訪問這個 Web 文檔時這些信息可供該文檔使用巷屿。這樣一來也就完成了我們的直接訪問行為

img

也就是說,只要我們獲取這個cookie促绵,我們在訪問后臺服務(wù)器的時候攒庵,也是不需要什么登陸操作的,一氣呵成

第三步:請求數(shù)據(jù)

經(jīng)歷上面的步驟败晴,我們已經(jīng)成功的向服務(wù)器發(fā)起請求,當(dāng)你執(zhí)行前面幾步得操作后栽渴,你會得到這樣的一個結(jié)果

img

這說明尖坤,我們成功和服務(wù)器進(jìn)行了鏈接

響應(yīng)狀態(tài)
200:代表成功
301:代表跳轉(zhuǎn)
404:文件不存在
403:權(quán)限
502:服務(wù)器錯誤</pre>

接下來我們要通過我們傳入的user-agent以及cookie來確立我需要哪些數(shù)據(jù),獲取url請求過來的數(shù)據(jù)

也就是這樣的一個結(jié)果

img

第四步闲擦,數(shù)據(jù)分析

到第三步慢味,我們已經(jīng)獲取完成了相應(yīng)的數(shù)據(jù)信息,但是我們只需要其中的一部分墅冷,所以要進(jìn)行解析纯路,留下的是我們自己需要的數(shù)據(jù)

第五步,數(shù)據(jù)存儲

解析完成的數(shù)據(jù)寞忿,我們保存到本地驰唬,至此,數(shù)據(jù)爬取的工作完成

好了,一個數(shù)據(jù)爬蟲的工作到這里就結(jié)束了叫编,希望大家沒啥事的時候可以自己動手實際操作一下辖佣,下面是我實現(xiàn)的代碼,大家可以自己參考

代碼實現(xiàn)

為了照顧剛接觸這個的朋友搓逾,所以這里我寫的會相對的詳細(xì)一些卷谈,其中一些細(xì)小的知識點就不展開講解了,畢竟我還要寫苦逼的年終總結(jié)

# 爬取B站彈幕
?
# 什么是模塊:模塊就是用一堆的代碼實現(xiàn)了一些功能的代碼的集合,通常一個或者多個函數(shù)寫在一個.py文件里
import requests
?
url='https://api.bilibili.com/x/v2/dm/history?type=1&oid=260575715&date=2020-12-20'
?
# 如何獲取路徑下的信息
#  urllib(python自帶的)  request(第三方模塊)
?
# 字典:字典是python里的一種數(shù)據(jù)類型霞篡,特點是元素的無序性世蔗,和鍵key的唯一性。字典的創(chuàng)建方法是{key:values}
?
getdata=requests.get(url)
print(getdata)
?
headers={
?
 #user-agent朗兵,就好像我們?nèi)ヒ粋€人家串門污淋,但是,如果主人不認(rèn)識你矛市,肯定不會給你開門芙沥,但是,如果你偽裝成一個他認(rèn)識的人浊吏,就像易容一樣而昨,那他是不是就給你開門了啊
 # 模擬瀏覽器的行為
 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36',
 #cookie:我們在登錄的時候會進(jìn)行用戶名和密碼的輸入,之后我們在登陸的時候就不需要再進(jìn)行登陸了找田,那這個地方就是因為歌憨,這個賬號和密碼信息緩存到一起
 # 你要自己實現(xiàn)的時候要換成自己的哦
?
 'cookie': "_uuid=326F06D1-FE8D-9191-42CE-DD309D14353C67633infoc; buvid3=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; sid=4lmxv7lu; rpdid=|(u)Y|l|uJRk0J'ulmJY|kRR|; dy_spec_agreed=1; LIVE_BUVID=AUTO2815973097085458; blackside_state=1; CURRENT_FNVAL=80; bp_video_offset_26390853=467157764523510086; bp_t_offset_26390853=467157764523510086; fingerprint=073aaf7f9d22ae55cfafd954c7f31b26; buivd_fp=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; buvid_fp_plain=BCE2280A-DF5C-4872-98E2-4002159A716F143082infoc; PVID=3; bfe_id=fdfaf33a01b88dd4692ca80f00c2de7f; buvid_fp=33D869DB-6F2F-4BB0-B607-1B7B34F07CFD53925infoc; DedeUserID=26390853; DedeUserID__ckMd5=8d24b1d50476c5e5; SESSDATA=c6386003%2C1624877887%2Ca501d*c1; bili_jct=704cf795ee7a134f74dd244b80c5107d"
}
?
resq = requests.get(url,headers=headers)
?
resq.encoding='utf-8'
?
print(resq.text)
?
?
#<d p="25.25400,1,25,16777215,1608370925,0,aded156e,42587259146338307">別啊,我的快樂啊</d>
?
?
# 使用python進(jìn)行編程墩衙,一定要注意導(dǎo)入
import re
?
data=re.findall(r'<d p=".*?">(.*?)</d>',resq.text)
# 緩存 cookie
print(data)
?
# as 起別名
import pandas as pd
# 改變格式之后的數(shù)據(jù)
test=pd.DataFrame(data=data)
test.to_csv('e:/testcsv.csv',encoding='utf-8')</pre>

剛剛接觸python的小伙伴务嫡,可以每獲取一步數(shù)據(jù)就打印一次,這樣可能對于你的理解有一定的幫助

分享自己的碼云地址漆改,除了資料之外心铃,還有我分享的學(xué)習(xí)代碼,可以自行下載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挫剑,一起剝皮案震驚了整個濱河市去扣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌樊破,老刑警劉巖愉棱,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異哲戚,居然都是意外死亡奔滑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門顺少,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朋其,“玉大人王浴,你說我怎么就攤上這事×钏蓿” “怎么了叼耙?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粒没。 經(jīng)常有香客問我筛婉,道長,這世上最難降的妖魔是什么癞松? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任爽撒,我火速辦了婚禮,結(jié)果婚禮上响蓉,老公的妹妹穿的比我還像新娘硕勿。我一直安慰自己,他們只是感情好枫甲,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布源武。 她就那樣靜靜地躺著,像睡著了一般想幻。 火紅的嫁衣襯著肌膚如雪粱栖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天脏毯,我揣著相機(jī)與錄音闹究,去河邊找鬼。 笑死食店,一個胖子當(dāng)著我的面吹牛渣淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吉嫩,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼价认,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了自娩?” 一聲冷哼從身側(cè)響起刻伊,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎椒功,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體智什,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡动漾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荠锭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旱眯。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出删豺,到底是詐尸還是另有隱情共虑,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布呀页,位于F島的核電站妈拌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蓬蝶。R本人自食惡果不足惜尘分,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丸氛。 院中可真熱鬧培愁,春花似錦、人聲如沸缓窜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禾锤。三九已至私股,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間时肿,已是汗流浹背庇茫。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留螃成,地道東北人旦签。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像寸宏,于是被迫代替她去往敵國和親宁炫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容