zoukankan      html  css  js  c++  java
  • Python爬虫抓取B站人类高质量男性求偶视频的弹幕,康康都在讨论什么!❤️

    爬取数据目标

    网站:bilibili

    效果展示

    工具使用

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

    重点学习内容

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

    项目思路解析

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

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

     

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

      

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

     

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

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

    处理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
    获取到数据后进行数据保存 数据保存在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('
    ', '')
            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的,可以直接留言或者私我【非常感谢你的点赞、收藏、关注、评论,一键四连支持】

    每日分享,喜欢的看标题和多多点赞收藏加关注~~蟹蟹
  • 相关阅读:
    poj 2187 Beauty Contest(旋转卡壳)
    poj 2540 Hotter Colder(极角计算半平面交)
    poj 1279 Art Gallery(利用极角计算半平面交)
    poj 3384 Feng Shui(半平面交的联机算法)
    poj 1151 Atlantis(矩形面积并)
    zoj 1659 Mobile Phone Coverage(矩形面积并)
    uva 10213 How Many Pieces of Land (欧拉公式计算多面体)
    uva 190 Circle Through Three Points(三点求外心)
    zoj 1280 Intersecting Lines(两直线交点)
    poj 1041 John's trip(欧拉回路)
  • 原文地址:https://www.cnblogs.com/nanhe/p/15137913.html
Copyright © 2011-2022 走看看