小姐姐教你用爬蟲抓取B站人類高質量男性求偶視頻的彈幕,康康都在討論什麼!

這是我參與8月更文挑戰的第5天,活動詳情查看:8月更文挑戰python

爬取數據目標

網站:bilibili image.png編程

效果展現

image.png

工具使用

開發工具:pycharm 開發環境:python3.7, Windows10 使用工具包:requests,threading, csvjson

重點學習內容

  • 常見請求頭的反爬
  • json數據的處理
  • csv文件處理

項目思路解析

找到你須要採集的視頻地址(我找的是小破站的一個高質量男性的視頻) image.png 網址:www.bilibili.com/video/BV1po…api

爬蟲採集數據首先要找到對應的數據目標地址 能夠明顯看出當前的網頁的評論數據是在不斷變化的 須要找到對應的評論接口 習慣性的去找動態數據瀏覽器

image.pngimage.png

數據並無在動態數據裏 清空數據加載新的評論數據 觸發加載條件markdown

image.pngimage.png

加載的數據在all裏 明確數據以後就好處理了 獲取到對應的網頁接口 經過requests發送網絡請求網絡

   url = 'https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=9659814&mode=3&plat=1&_=1627974678383'.format(
        i)
​
    response = requests.get(url)
    print(response.text)
複製代碼

image.png

數據請求失敗請求頭沒有作反爬策略 添加對應的ua,以及refere 主要是防盜鏈的請求頭措施,在瀏覽器請求也是得不到數據的ide

image.png 獲取到準確的數據 提取本身想要的數據信息工具

  • 評論的內容
  • 評論的時間
  • 評論的做者
  • 做者的性別
  • 做者的個性簽名
  • (各位大佬能夠根據本身的需求進行自動的採集數據)

處理json數據時要注意, json數據前有jQuery1720892078778784086_1627994582044 能夠經過正則的方式進行匹配提取 這裏我選擇修改url的參數 講網址的jQuery1720892078778784086_1627994582044進行刪除 最終的網址是:oop

https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=376402596&mode=3&plat=1&_=1627993394215
複製代碼

image.png 獲取到數據後進行數據保存 數據保存在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 csv  # 處理對應的csv文件


headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}


def save_data(item):
    with open('小破站高質量人類.csv', "a", newline='', encoding="gbk")as f:
        filename = ['content', 'ctime', 'sex', 'uname', 'sign']
        csv_data = csv.DictWriter(f, fieldnames=filename)
        csv_data.writerow(item)


def get_data(i):
    url = 'https://api.bilibili.com/x/v2/reply/main?jsonp=jsonp&next={}&type=1&oid=376402596&mode=3&plat=1&_=1627993394215'.format(
        i)

    response = requests.get(url, headers=headers).json()
    # print(response.content.decode('utf-8'))
    item = {}

    for data in response['data']['replies']:
        # print(data)
        # print(' ')
        item['content'] = data['content']['message'].replace('\n', '')
        item['ctime'] = data['ctime']  # 時間戳保存方便
        item['sex'] = data['member']['sex']
        item['uname'] = data['member']['uname']
        item['sign'] = data['member']['sign']
        print(item)
        save_data(item)


if __name__ == '__main__':
    for i in range(1, 300):
        # 發送網絡請求
        get_data(i)
複製代碼

我是白又白i,一名喜歡分享知識的程序媛❤️

若是沒有接觸過編程這塊的朋友看到這篇博客,發現不會的或者想要學習Python的,能夠直接留言或者私我【很是感謝你的點贊、收藏、關注、評論,一鍵四連支持】

相關文章
相關標籤/搜索