大家好,我是五包辣條,
《爬蟲100例實戰案例》又來了,昨天兄弟萌看直播了嗎,一句話EDG牛掰就完事了,
四強的時候
T1:我是三冠王
GENG:我是雙冠王
DK:我是去年世界冠軍
EDG:本來想以第一次進四強的身份和你們相處,沒想到得到的卻是疏遠,不裝了!攤牌了!我是今年世界冠軍!

爬取資料目標
網站:bilibili

效果展示

工具使用
開發工具:pycharm 開發環境:python3.7, Windows10 使用工具包:requests,threading, csv
重點學習內容
-
常見請求頭的反爬
-
json資料的處理
-
csv檔案處理
專案思路決議
找到你需要采集的視頻地址(EDG牛逼!!!!)

網址:【S11全球總決賽】決賽 11月6日 EDG vs DK_嗶哩嗶哩bilibili_英雄聯盟
爬蟲采集資料首先要找到對應的資料目標地址,可以明顯看出當前的網頁的評論資料是在不斷變化的,需要找到對應的評論介面,習慣性的去找動態資料,

資料并沒有在動態資料里,清空資料加載新的評論資料,觸發加載條件,

加載的資料在all里,明確資料之后就好處理了,獲取到對應的網頁介面,通過requests發送網路請求,
url = 'https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=891511588&mode=3&plat=1&_=1636272184444'.format(i)
?
response = requests.get(url)
print(response.text)

資料請求失敗請求頭沒有做反爬策略 添加對應的ua,以及refere 主要是防盜鏈的請求頭措施,在瀏覽器請求也是得不到資料的,獲取到準確的資料,提取自己想要的資料資訊,
-
評論的內容
-
評論的時間
-
評論的作者
-
作者的性別
-
作者的個性簽名
-
(各位大佬可以根據自己的需求進行自動的采集資料)
處理json資料時要注意, json資料前有jQuery1720892078778784086_1627994582044 可以通過正則的方式進行匹配提取 這里我選擇修改url的引數 講網址的jQuery1720892078778784086_1627994582044進行洗掉 最終的網址是:
https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=891511588&mode=3&plat=1&_=1636272184444

獲取到資料后進行資料保存,資料保存在csv檔案,
def save_data(item):
with open('小破站1.csv', "a", newline='', encoding="utf-8")as f:
filename = ['content', 'ctime', 'sex', 'uname', 'sign']
csv_data = csv.DictWriter(f, fieldnames=filename)
csv_data.writerow(item)
?
簡易原始碼分享
import requests
import csv
?
def save_data(item):
with open('EDG牛逼!.csv', 'a', newline='', encoding='utf-8')as f:
?
filename = ['content', 'uname', 'sign', 'sex']
csv_data = csv.DictWriter(f, fieldnames=filename)
# csv_data.writeheader()
csv_data.writerow(item)
?
?
?
def get_data(url):
?
headers = {
'referer': 'https://www.bilibili.com/bangumi/play/ss5852/?from=search&seid=6248919601957945511',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}
?
response = requests.get(url, headers=headers).json()
item = {}
for data in response['data']['replies']:
item['content'] = data['content']['message'].strip()
# print(content)
item['uname'] = data['member']['uname']
item['sign'] = data['member']['sign']
item['sex'] = data['member']['sex']
# print(item)
save_data(item)
?
if __name__ == '__main__':
for i in range(1, 3):
url = 'https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=891511588&mode=3&plat=1&_=1636272184444'.format(i)
html = get_data(url)
2012,一個卡牌,一個雷恩加爾,一群紅衣少年的歡聲笑語,
2013,一個杰斯,一個扎克,一場支離破碎的夢境,
2014,一個螳螂,一個蘭博,一座搖搖欲墜的基地,
2015,一個寡婦,一個妖姬,一本永遠疊不上去的梅賈竊魂卷,
2016,一個盲僧,一個奧拉夫,一串恥辱的數字,
2017,一個克格莫,一個青鋼影,一個賽區絕境中最后的救贖,
2018,一個刀妹,一個劍魔,一個至高無上的尊嚴,
2019,一個泰坦,一個盲僧,一個浴火重生的鳳凰,
2020,一個船長,一個劍姬,一個殺戮無法彌補的遺憾,
2021,一個皇子,一個佐伊,一個挽大廈于將傾的騎士,
👇🏻 疑難解答、學習資料、路線圖可通過搜索下方 👇🏻
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353460.html
標籤:其他
上一篇:校園網斷線重連,用爬蟲來搞定!
下一篇:一贊一道題 11.6-11.7
