python 爬取哔哩哔哩up主信息和投稿视频


Posted in Python onJune 07, 2021

项目地址:

https://github.com/cgDeepLearn/BilibiliCrawler

 项目特点

  1. 采取了一定的反反爬策略。
  2. Bilibili更改了用户页面的api, 用户抓取解析程序需要重构。

快速开始

  1. 拉取项目, git clone https://github.com/cgDeepLearn/BilibiliCrawler.git
  2. 进入项目主目录,安装虚拟环境crawlenv(请参考使用说明里的虚拟环境安装)。
  3. 激活环境并在主目录运行crawl,爬取结果将保存在data目录csv文件中。
ource activate crawlenv
python initial.py file  # 初始化file模式
python crawl_user.py file 1 100  # file模式,1 100是开始、结束bilibili的uid

进入data目录查看抓取的数据,是不是很简单!

如果需要使用数据库保存和一些其他的设置,请看下面的使用说明

使用说明

1.拉取项目

git clone https://github.com/cgDeepLearn/BilibiliCrawler.git

2.进入项目主目录, 安装虚拟环境

  • 若已安装anaconda
conda create -n crawlenv python=3.6
source activate crawlenv  # 激活虚拟环境
pip install -r requirements.txt
  • 若使用virtualenv
virtualenv crawlenv
source crawlenv/bin/activate  # 激活虚拟环境,windows下不用source
pip install -r requirements.txt  # 安装项目依赖

3. 修改配置文件

进入config目录,修改config.ini配置文件(默认使用的是postgresql数据库,如果你是使用的是postgresql,只需要将其中的参数替换成你的,下面其他的步骤可以忽略) 数据库配置选择其中一个你本地安装的即可,将参数更换成你的 如果你需要更自动化的数据库配置,请移步我的DB_ORM项目

[db_mysql]
user = test
password = test
host = localhost
port = 3306
dbname = testdb

[db_postgresql]
user = test
password = test
host = localhost
port = 5432
dbname = testdb

然后修改conf.py中获取配置文件的函数

def get_db_args():
    """
    获取数据库配置信息
    """
    return dict(CONFIG.items('db_postgresql'))  # 如果安装的是mysql,请将参数替换为db_mysql

进入db目录,修改basic.py的连接数据库的DSN

# connect_str = "postgresql+psycopg2://{}:{}@{}:{}/{}".format(kwargs['user'], kwargs['password'], kwargs['host'], kwargs['port'], kwargs['dbname'])
# 若使用的是mysql,请将上面的connect_str替换成下面的
connect_str = "mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(kwargs['user'], kwargs['password'], kwargs['host'], kwargs['port'], kwargs['dbname'])
# sqlite3,mongo等请移步我的DB_ORM项目,其他一些数据库也将添加支持

4. 运行爬虫

  • 在主目录激活虚拟环境, 初次运行请执行
python initial.py db # db模式,file模式请将db换成file
# file模式会将抓取结果保存在data目录
# db模式会将数据保存在设置好的数据库中
# 若再次以db模式运行将会drop所有表后再create,初次运行后请慎重再次使用!!!
# 如果修改添加了表,并不想清空数据,请运行 python create_all.py
  • 开始抓取示例
python crawl_user.py db 1 10000 # crawl_user 抓取用户数据,db 保存在数据库中, 1 10000为抓取起止id
python crawl_video_ajax.py db 1 100 # crawl_video_ajax 抓取视频ajax信息保存到数据库中,
python crawl_user_video.py db 1 10000 #同时抓取user 和videoinfo
# 示例为uid从1到100的user如果有投稿视频则抓取其投稿视频的信息,
# 若想通过视频id逐个抓取请运行python crawl_video_by_aid.py db 1 1000
  • 爬取速率控制

程序内已进行了一些抓取速率的设置,但各机器cpu、mem不同抓取速率也不同,请酌情修改
太快太慢请修改各crawl中的sleepsec参数,ip会被限制访问频率,overspeed会导致爬取数据不全,
之后会添加运行参数speed(high, low),不用再手动配置速率

  • 日志

爬取日志在logs目录
user, video分别为用户和视频的爬取日志
storage为数据库日志 如需更换log格式,请修改logger模块

  • 后台运行

linux下运行python ......前面加上nohup,例如:

nohup python crawl_user db 1 10000

程序输出保存文件,默认会包存在主目录额nohup.out文件中,添加 > fielname就会保存在设置的文件中:

nohup python crawl_video_ajax.py db 1 1000 > video_ajaxup_1_1000.out  # 输出将保存在video_ajaxup_1_1000.out中
  • 更多

程序多线程使用的生产者消费者模式中产生了程序运行的状况的打印信息,类似如下

produce 1_1
consumed 1_1
...

如想运行更快,请在程序各项设置好后注释掉其中的打印程序

# utils/pcModels.py
print('[+] produce %s_%s' % (index, pitem))  # 请注释掉

print('[-] consumed %s_%s\n' % (index, data))  # 请注释掉

更多

项目是单机多线程,若想使用分布式爬取,请参考Crawler-Celery

以上就是python 爬取哔哩哔哩up主信息和投稿视频的详细内容,更多关于python 爬取哔哩哔哩的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
Python实现针对中文排序的方法
May 09 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
Jan 06 Python
python实现视频读取和转化图片
Dec 10 Python
python接口自动化如何封装获取常量的类
Dec 24 Python
python自动脚本的pyautogui入门学习
Apr 01 Python
python操作toml文件的示例代码
Nov 27 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
解决Pytorch中关于model.eval的问题
May 22 Python
OpenCV-Python直方图均衡化实现图像去雾
OpenCV-Python实现人脸磨皮算法
Python实现拼音转换
Python实现简繁体转换
在Python中如何使用yield
Jun 07 #Python
python 爬取天气网卫星图片
Python实现天气查询软件
You might like
php适配器模式介绍
2012/08/14 PHP
php验证码生成代码
2015/11/11 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
Javascript图像处理—为矩阵添加常用方法
2012/12/27 Javascript
基于JQuery的列表拖动排序实现代码
2013/10/01 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
2015/06/17 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
解决Js先触发失去焦点事件再执行点击事件的问题
2018/08/30 Javascript
JavaScript基础之this和箭头函数详析
2019/09/05 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
用Python编写一个国际象棋AI程序
2014/11/28 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python之django母板页面的使用
2018/07/03 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
使用CSS3编写类似iOS中的复选框及带开关的按钮
2016/04/11 HTML / CSS
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
装修致歉信
2014/01/15 职场文书
优秀学生评语大全
2014/04/25 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
小学数学教研活动总结
2014/07/01 职场文书
千与千寻观后感
2015/06/04 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers