前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。

爬取数据目标

网站: bilibili

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第1张图片

效果展示

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第2张图片

工具使用

开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests,threading, csv

重点学习内容

  • 常见请求头的反爬
  • json数据的处理
  • csv文件处理

项目思路解析

找到你需要采集的视频地址(我找的是小破站的一个高质量男性的视频) 网址: https://www.bilibili.com/video/BV1po4y1C7Pa?from=search&seid=8340616883387402352

爬虫采集数据首先要找到对应的数据目标地址 可以明显看出当前的网页的评论数据是在不断变化的 需要找到对应的评论接口 习惯性的去找动态数据

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第3张图片

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第4张图片

数据并没有在动态数据里 清空数据加载新的评论数据 触发加载条件

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第5张图片

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第6张图片

加载的数据在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)
1.2.3.4.5.

数据请求失败请求头没有做反爬策略 添加对应的ua,以及refere 主要是防盗链的请求头措施,在浏览器请求也是得不到数据的

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第7张图片

获取到准确的数据 提取自己想要的数据信息

  • 评论的内容
  • 评论的时间
  • 评论的作者
  • 作者的性别
  • 作者的个性签名
  • (各位大佬可以根据自己的需求进行自动的采集数据)

处理json数据时要注意, json数据前有jQuery1720892078778784086_1627994582044 可以通过正则的方式进行匹配提取 这里我选择修改url的参数 讲网址的jQuery1720892078778784086_1627994582044进行删除 最终的网址是:

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

前段时间抖音看到的人类高质量男性求偶视频爆火,我用Python抓取了全部弹幕,看看都在讨论啥。_第8张图片

获取到数据后进行数据保存 数据保存在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)
​
1.2.3.4.5.6.

简易源码分享

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)

需要完整项目源代码点这里获取

你可能感兴趣的:(程序员,Python,python,开发语言,后端)