首页
 

通知公告

python爬各平台评论并数据分析——数据采集、评论情绪分析、新闻热度

来源:欧亿体育点击:时间:2024-01-21 21:10

一、爬取数据

小问题汇总

1.python之matplotlib使用系统字体

用于解决python绘图中,中文字体显示问题

2.cookie与视频页面id(b站、微博等)查看

F12打开网页开发者模式,然后F5刷新,进入控制台中的网络,查看Fetch/XHR

3.爬取wb评论时,最好使用网页手机端

网页手机端:https://m.weibo.cn/?sudaref=cn.bing.com

4.从存储文件读数据,可能会提示编码错误

对文件的打开方式,添加代码encoding='utf-8'

b站爬虫

1.前提准备工具

  1. 安装 Python 3。
  2. 安装所需的库。在命令行中输入以下命令:pip install selenium beautifulsoup4 webdriver-manager
  3. 安装 chrome浏览器以及启动软件chromedriver.exe(版本号要接近),使用selenium + chrome浏览器爬取数据
  4. .csv文件用excel或者notepad打开都会乱码,可用记事本打开,或者用excel导入.csv文件,具体过程自行百度

2.使用说明

1.功能说明
  • 批量爬取B站多个视频的评论,使用Selenium而非B站api,能爬取到更全面的数据。
  • 能够断点续爬,可以随时关闭程序,等到有网络时再继续运行。
  • 遇到错误自动重试,非常省心,可以让它自己爬一整晚。
2.关于断点续爬与progress
  • 断点续爬功能依托progress.txt记录实现:程序运行时,如果代码同级文件夹内存在progress.txt文件,它会读取其中进度;如果没有,则自动创建。

  • 如果想要从头开始爬取,只需删除 progress.txt 文件即可。

  • 如果想要修改爬虫任务,跳过某些视频/一级评论/二级评论页,建议直接修改progress.txt文件
    (例如,有一个视频爬取失败,想要跳过它,直接在progress中,把video_count加1即可)

  • progress含义:
    第{video_count}个视频已完成爬取。
    第{video_count + 1}个视频中,第{first_comment_index}个一级评论的,二级评论第{sub_page}页已完成爬取。
    "write_parent"为1指当前一级评论已写入,为0指当前一级评论尚未写入。
    示例如右:{"video_count": 1, "first_comment_index": 15, "sub_page": 114, "write_parent": 1}
    注意:“video_count”“first_comment_index”"sub_page"三个值全部是从0开始的,"write_parent"取值为0或1。

    3.使用步骤
    1. 将要爬取评论的视频 URL 列表放入名为 video_list.txt 的文件中,每行一个 URL。

    2. 参数设定

      • 若要修改最大滚动次数(默认45次,预计最多爬取到920条一级评论),请在代码中修改参数MAX_SCROLL_COUNT的值。注意,滚动次数过多,加载的数据过大,网页可能会因内存占用过大而崩溃。
      • 若要设定最大二级评论页码数(默认为150页),请在代码中修改参数max_sub_pages的值(若想无限制,请设为max_sub_pages = None)。建议设定一个上限以减少内存占用,避免页面崩溃。
    3. 运行代码:python Bilicomment.py(或pycharm等软件打开运行)。代码使用selenium爬取数据。

    4. 根据看到"请登录,登录成功跳转后,按回车键继续…"提示后,请登录 Bilibili。登录成功并跳转后,回到代码,按回车键继续。

    5. 等待爬取完成。每个视频的评论数据将保存到以视频 ID 命名的 CSV 文件中, CSV 文件位于代码文件同级目录下。

    6. 输出的 CSV 文件将包括以下列:‘一级评论计数’, ‘隶属关系’(一级评论/二级评论), ‘被评论者昵称’(如果是一级评论,则为“up主”), ‘被评论者ID’(如果是一级评论,则为“up主”), ‘昵称’, ‘用户ID’, ‘评论内容’, ‘发布时间’, ‘点赞数’。

    7. 输出的 CSV 文件是utf-8编码,若乱码,请检查编码格式(可以先用记事本打开查看)。

    8. 如果有视频因为错误被跳过,将会被记录在代码同级文件夹下的video_errorlist.txt中。

4.注意实现
  1. 用Excel打开 CSV 文件查看时,可能会发现有些单元格报错显示"$NAME?“,这是由于这个单元格的内容是以”-“符号开头的,例如昵称”-Ghauster"。
  2. 如果代码报错Permission denied,请查看是否有别的进程占用了正在写入中的 CSV 文件或 progress.txt 文件(比如,文件被我自己打开了),检查是否有写入权限。还不行,可以尝试以管理员身份运行代码(遇到PermissionError,都可以尝试以管理员身份运行来解决)。
  3. 爬取超大评论量的热门视频时,网页可能会因为内存不足而崩溃。如果发生这种情况,程序会在一定时间后自动重启浏览器断点续爬。但是如果网页都还没有滚动到底全部加载完、都还没有开始爬,就内存不足了,那无论自动重试多少次都会重复出现网页崩溃的问题,此时建议限制最大滚动次数。
  4. 在使用selenium + chrome浏览器爬取数据时,如果该视频评论量过大,selenium模拟浏览器会产生大量的临时文件。目前,程序将缓存存储在代码文件所在目录中,重试续爬前我们可以自行删除。
  5. 如果程序长时间没有动静(控制台长时间没有打印当前进度),就重启程序吧,它会断点续爬的。这可能是因为访问b站过于频繁,阿b不想理你了(或者要输验证码了)。如果这个问题频繁发生,可以尝试延长延时时间,或改为随机延时。
    添加随机延时:
    import random
    在想要延时的地方写time.sleep(random.uniform(1, 5)) # 随机生成1到5秒之间的延时,具体秒数可根据需要修改

完整代码

github:https://github.com/Ghauster/BilibiliCommentScraper
记得给作者点星星

微博爬取

1.前提准备工具

  1. 安装SQLiteSpy,用于查看.db文件(爬取数据存储方式)
  2. cookie是以SUB=_2A2开头的
  3. User-Agent也可以找到,Mozilla/5.0 (Macintosh。。。

2.使用步骤

  1. 点进微博正文

    地址栏中的数字:491…278就是ID号
    仅修改代码中的weibo_id即可,可自行写循环,读取多个视频id
  2. 可自行修改每次的获取量max_retries,不易太大,容易被