用Python爬取B站5000條視頻和項目源碼,需要者快來收藏

去年夏天,《哪吒之魔童降世》碾壓其他暑期檔電影,成為最強黑馬。我身邊的朋友,不是已經N刷了這部電影,就是在趕去N刷的路上。從票房上也可窺見一斑:



用Python爬取B站5000條視頻和項目源碼,需要者快來收藏


獲取方式:轉發此文+關注 並 私信小編 “ 學習”,即可免費獲取哦!


數據爬取
在瀏覽器開發者模式CTRL+F很容易就能找到所需要的信息,就在頁面源碼中:


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



因此我們用beautifulsoup庫就能快速方便地獲取想要的信息啦。
因為B站視頻數量有限定,每次搜索只能顯示20條*50頁=1000個視頻信息。


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



為了儘可能多的獲取視頻信息,我另外還選了“最多點擊”“最新發布”“最多彈幕”和“最多收藏”4個選項。


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏


  • http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=totalrank&duration=0&tids_1=0&page={}
  • http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=click&duration=0&tids_1=0&page={}
  • http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=stow&duration=0&tids_1=0&page={}
  • http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=dm&duration=0&tids_1=0&page={}
  • http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=pubdate&duration=0&tids_1=0&page={}


5個URL,一共爬取5000條視頻,去重之後還剩下2388條信息。


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



為了得到“轉評贊”數據,我還以視頻id裡面的數字(去掉“av”)為索引,遍歷訪問了每個視頻頁面獲取了更詳細的數據,最終得到以下字段:


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏


獲取方式:轉發此文+關注 並 私信小編 “ 學習”,即可免費獲取哦!


數據分析


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



電影在7月18、19日就進行了全國範圍的點映,正式上映時間為7月26日,在這之後相關視頻數量有明顯的上升。
在這時間之前的,最早發佈時間可以追溯到2018年11月份,大部分都是預告類視頻:


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



在8月7日之後視頻數量猛增,單單8月7日一天就新上傳了319個相關視頻。
從標題名字中我們可以大致瞭解視頻的內容:


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏



毫無疑問,“哪吒”和“敖丙”作為影片兩大主角是視頻的主要人物;因為他們同生共患難的情誼,“藕餅”(“哪吒+敖丙”組合)也是視頻的關鍵詞;除此之外,“國漫”也是一大主題詞,畢竟我們這次是真正地被我們的國產動漫震撼到了。


用Python爬取B站5000條視頻和項目源碼,需要者快來收藏


獲取方式:轉發此文+關注 並 私信小編 “ 學習”,即可免費獲取哦!


實現代碼
bilibili.py


<code>import requestsimport refrom datetime import datetimeimport pandas as pdimport randomimport timevideo_time=[]abstime=[]userid=[]comment_content=[]def dateRange(beginDate, endDate): dates = [] dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d") date = beginDate[:] while date <= endDate: dates.append(date) dt = dt + datetime.timedelta(1) date = dt.strftime("%Y-%m-%d") return dates#視頻發佈時間~當日search_time=dateRange("2016-01-10", "2019-06-25")headers = { 'Host': 'api.bilibili.com', 'Connection': 'keep-alive', 'Content-Type': 'text/xml', 'Upgrade-Insecure-Requests': '1', 'User-Agent': '', 'Origin': 'https://www.bilibili.com', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9',# 'Cookie': 'finger=edc6ecda; LIVE_BUVID=AUTO1415378023816310; stardustvideo=1; CURRENT_FNVAL=8; buvid3=0D8F3D74-987D-442D-99CF-42BC9A967709149017infoc; rpdid=olwimklsiidoskmqwipww; fts=1537803390' }#cookie用火狐瀏覽器找,以字典形式寫入cookie={ # '_dfcaptcha':'2dd6f170a70dd9d39711013946907de0',# 'bili_jct':'9feece81d443f00759b45952bf66dfff',# 'buvid3':'DDCE08BC-0FFE-4E4E-8DCF-9C8EB7B2DD3752143infoc',# 'CURRENT_FNVAL':'16',# 'DedeUserID':'293928856',# 'DedeUserID__ckMd5':'6dc937ced82650a6',# 'LIVE_BUVID':'AUTO7815513331706031',# 'rpdid':'owolosliwxdossokkkoqw',# 'SESSDATA':'7e38d733,1564033647,804c5461',# 'sid':' 9zyorvhg',# 'stardustvideo':'1', }url='https://api.bilibili.com/x/v2/dm/history?type=1&oid=5627945&date={}'for search_data in search_time: print('正在爬取{}的彈幕'.format(search_data)) full_url=url.format(search_data) res=requests.get(full_url,headers=headers,timeout=10,cookies=cookie) res.encoding='utf-8'  data_number=re.findall('d p="(.*?)">',res.text,re.S) data_text=re.findall('">(.*?)',res.text,re.S) comment_content.extend(data_text) for each_numbers in data_number: each_numbers=each_numbers.split(',') video_time.append(each_numbers[0])  abstime.append(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(each_numbers[4]))))  userid.append(each_numbers[6]) time.sleep(random.random()*3)print(len(comment_content))print('爬取完成')result={'用戶id':userid,'評論時間':abstime,'視頻位置(s)':video_time,'彈幕內容':comment_content}results=pd.DataFrame(result)final= results.drop_duplicates()final.info()final.to_excel('B站彈幕(天鵝臂)最後.xlsx')/<code>

bilibili_danmu.py.


<code>import requestsimport reimport datetimeimport pandas as pdimport randomimport timevideo_time=[]abstime=[]userid=[]comment_content=[]def dateRange(beginDate, endDate): dates = [] dt = datetime.datetime.strptime(beginDate, "%Y-%m-%d") date = beginDate[:] while date <= endDate: dates.append(date) dt = dt + datetime.timedelta(1) date = dt.strftime("%Y-%m-%d") return dates#視頻發佈時間~當日search_time=dateRange("2019-07-26", "2019-08-09")headers = { 'Host': 'api.bilibili.com', 'Connection': 'keep-alive', 'Content-Type': 'text/xml', 'Upgrade-Insecure-Requests': '1', 'User-Agent': '', 'Origin': 'https://www.bilibili.com', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', }#cookie用火狐瀏覽器找,以字典形式寫入cookie={ # '_dfcaptcha':'2dd6f170a70dd9d39711013946907de0', 'bili_jct':'bili_jct5bbff2af91bd6d6c219d1fafa51ce179', 'buvid3':'4136E3A9-5B93-47FD-ACB8-6681EB0EF439155803infoc', 'CURRENT_FNVAL':'16', 'DedeUserID':'293928856', 'DedeUserID__ckMd5':'6dc937ced82650a6', 'LIVE_BUVID':'AUTO6915654009867897',# 'rpdid':'owolosliwxdossokkkoqw', 'SESSDATA':'72b81477%2C1567992983%2Cbd6cb481', 'sid':'i2a1khkk', 'stardustvideo':'1', }url='https://api.bilibili.com/x/v2/dm/history?type=1&oid=105743914&date={}'for search_data in search_time: print('正在爬取{}的彈幕'.format(search_data)) full_url=url.format(search_data) res=requests.get(full_url,headers=headers,timeout=10,cookies=cookie) res.encoding='utf-8'  data_number=re.findall('d p="(.*?)">',res.text,re.S) data_text=re.findall('">(.*?)',res.text,re.S) comment_content.extend(data_text) for each_numbers in data_number: each_numbers=each_numbers.split(',') video_time.append(each_numbers[0])  abstime.append(time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(int(each_numbers[4]))))  userid.append(each_numbers[6]) time.sleep(random.random()*3)print(len(comment_content))print('爬取完成')result={'用戶id':userid,'評論時間':abstime,'視頻位置(s)':video_time,'彈幕內容':comment_content}results=pd.DataFrame(result)final= results.drop_duplicates()final.info()final.to_excel('B站彈幕(哪吒).xlsx')/<code>

bilibili_detailpage.py


<code>from bs4 import BeautifulSoupimport requestsimport warningsimport refrom datetime import datetimeimport jsonimport pandas as pdimport randomimport timeimport datetimefrom multiprocessing import Poolurl='https://api.bilibili.com/x/web-interface/view?aid={}'headers = { 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1', 'Referer':'https://www.bilibili.com/', 'Connection':'keep-alive'}cookies={'cookie':'LIVE_BUVID=AUTO6415404632769145; sid=7lzefkl6; stardustvideo=1; CURRENT_FNVAL=16; rpdid=kwmqmilswxdospwpxkkpw; fts=1540466261; im_notify_type_293928856=0; CURRENT_QUALITY=64; buvid3=D1539899-8626-4E86-8D7B-B4A84FC4A29540762infoc; _uuid=79056333-ED23-6F44-690F-1296084A1AAE80543infoc; gr_user_id=32dbb555-8c7f-4e11-beb9-e3fba8a10724; grwng_uid=03b8da29-386e-40d0-b6ea-25dbc283dae5; UM_distinctid=16b8be59fb13bc-094e320148f138-37617e02-13c680-16b8be59fb282c; DedeUserID=293928856; DedeUserID__ckMd5=6dc937ced82650a6; SESSDATA=b7d13f3a%2C1567607524%2C4811bc81; bili_jct=6b3e565d30678a47c908e7a03254318f; _uuid=01B131EB-D429-CA2D-8D86-6B5CD9EA123061556infoc; bsource=seo_baidu'}k=0def get_bilibili_detail(id): global k k=k+1 print(k) full_url=url.format(id[2:]) try: res=requests.get(full_url,headers=headers,cookies=cookies,timeout=30) time.sleep(random.random()+1) print('正在爬取{}'.format(id)) content=json.loads(res.text,encoding='utf-8') test=content['data'] except: print('error') info={'視頻id':id,'最新彈幕數量':'','金幣數量':'','不喜歡':'','收藏':'','最高排名':'','點贊數':'','目前排名':'','回覆數':'','分享數':'','觀看數':''} return info else: danmu=content['data']['stat']['danmaku'] coin=content['data']['stat']['coin'] dislike=content['data']['stat']['dislike'] favorite=content['data']['stat']['favorite'] his_rank=content['data']['stat']['his_rank'] like=content['data']['stat']['like'] now_rank=content['data']['stat']['now_rank'] reply=content['data']['stat']['reply'] share=content['data']['stat']['share'] view=content['data']['stat']['view'] info={'視頻id':id,'最新彈幕數量':danmu,'金幣數量':coin,'不喜歡':dislike,'收藏':favorite,'最高排名':his_rank,'點贊數':like,'目前排名':now_rank,'回覆數':reply,'分享數':share,'觀看數':view} return infoif __name__=='__main__':  df=pd.read_excel('哪吒.xlsx') avids=df['視頻id'] detail_lists=[] for id in avids: detail_lists.append(get_bilibili_detail(id)) reshape_df=pd.DataFrame(detail_lists)  final_df=pd.merge(df,reshape_df,how='inner',on='視頻id') final_df.to_excel('藕餅cp詳情new.xlsx') final_df.info()# final_df.duplicated(['視頻id'])# reshape_df.to_excel('藕餅cp.xlsx')/<code> 

bilibili_search.py


<code>from bs4 import BeautifulSoupimport requestsimport warningsimport refrom datetime import datetimeimport jsonimport pandas as pdimport randomimport timeimport datetimefrom multiprocessing import Poolheaders = { 'User-Agent': '' 'Referer':'https://www.bilibili.com/', 'Connection':'keep-alive'}cookies={'cookie':''}def get_bilibili_oubing(url): avid=[] video_type=[] watch_count=[] comment_count=[] up_time=[] up_name=[] title=[] duration=[] print('正在爬取{}'.format(url)) time.sleep(random.random()+2) res=requests.get(url,headers=headers,cookies=cookies,timeout=30) soup=BeautifulSoup(res.text,'html.parser') #avi號碼 avids=soup.select('.avid') #視頻類型 videotypes=soup.find_all('span',class_="type hide") #觀看數 watch_counts=soup.find_all('span',title="觀看") #彈幕 comment_counts=soup.find_all('span',title="彈幕") #上傳時間 up_times=soup.find_all('span',title="上傳時間") #up主 up_names=soup.find_all('span',title="up主") #title titles=soup.find_all('a',class_="title") #時長 durations=soup.find_all('span',class_='so-imgTag_rb') for i in range(20): avid.append(avids[i].text) video_type.append(videotypes[i].text) watch_count.append(watch_counts[i].text.strip()) comment_count.append(comment_counts[i].text.strip()) up_time.append(up_times[i].text.strip()) up_name.append(up_names[i].text) title.append(titles[i].text) duration.append(durations[i].text) result={'視頻id':avid,'視頻類型':video_type,'觀看次數':watch_count,'彈幕數量':comment_count,'上傳時間':up_time,'up主':up_name,'標題':title,'時長':duration} results=pd.DataFrame(result) return resultsif __name__=='__main__':  url_original='http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=totalrank&duration=0&tids_1=0&page={}' url_click='http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=click&duration=0&tids_1=0&page={}' url_favorite='http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=stow&duration=0&tids_1=0&page={}' url_bullet='http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=dm&duration=0&tids_1=0&page={}' url_new='http://search.bilibili.com/all?keyword=哪吒之魔童降世&from_source=nav_search&order=pubdate&duration=0&tids_1=0&page={}' all_url=[url_bullet,url_click,url_favorite,url_new,url_original] info_df=pd.DataFrame(columns = ['視頻id','視頻類型','觀看次數','彈幕數量','上傳時間','up主','標題','時長'])  for i in range(50): for url in all_url: full_url=url.format(i+1) info_df=pd.concat([info_df,get_bilibili_oubing(full_url)],ignore_index=True) print('爬取完成!') #去重 info_df=info_df.drop_duplicates(subset=['視頻id']) info_df.info() info_df.to_excel('哪吒.xlsx')/<code>


PS:小編這裡有一套Python自學從入門到精通的全套視頻學習資料,現在免費分享給大家


獲取方式:轉發此文+關注 並 私信小編 “ 學習”,即可免費獲取哦!


2019年最新python教程


如果你處於想學python或者正在學習python,python的教程不少了吧,但是是最新的嗎?
說不定你學了可能是兩年前人家就學過的內容,在這小編分享一波2019最新的python全套教程最後小編為大家準備了6月份新出的python自學視頻教程,共計約200G,免費分享給大家!
2019Python自學教程全新升級為《Python+數據分析+機器學習》,七大階段能力逐級提升,打造技能更全面的全棧工程師。

用Python爬取B站5000條視頻和項目源碼,需要者快來收藏

用Python爬取B站5000條視頻和項目源碼,需要者快來收藏

用Python爬取B站5000條視頻和項目源碼,需要者快來收藏

用Python爬取B站5000條視頻和項目源碼,需要者快來收藏

階段一:Python基礎知識和高級特性


Python語法基礎
Python字符串解析
Python時間和日曆
Python文件操作
Python面向對象
併發編程


函數式編程
正則表達式
設計模式
排序算法
異常
模塊


階段二:Linux基礎


shell操作
系統管理
常見Linux系統
HDFS搭建


階段三:數據庫原理和sql優化


Linux下MySQL數據庫
數據庫設計和SQL標準
Python數據庫操作的庫
Linux下MongoDB非關係型數據庫
SQL優化和數據庫優化
ORM對象關係映射基本思想


階段四:前端web開發



Html
CSS
PC端頁面開發實戰流程
Bootstrap
html5和css3
JavaScript
JQuery


階段五:Python Web後端開發


Django 框架開發
Nginx配置和uWSGI部署
RESTful接口開發
Flask框架開發
電商平臺項目
BBS論壇系統


階段六:爬蟲和數據分析


第一個Python網絡爬蟲
專業HTTP分析工具Fiddler的使用
實際爬蟲
Python編碼問題


urllib2 的使用
TesseractOCR語言模型爬取使用帶驗證碼登錄的網站
Beautiful Soup
XPath & CSS選擇器
PhantomJS
Selenium Webdriver
Scrapy大型框架使用代理服務器爬取
Scrapy分佈式集群多代理爬蟲Redis分佈式集群
Redis MongoDB在爬蟲裡的應用
數據分析工具與模塊


階段七:Python人工智能


機器學習
深度學習


獲取方式:轉發此文+關注 並 私信小編 “ 學習”,即可免費獲取哦!


分享到:


相關文章: