python 爬取哔哩哔哩up主信息和投稿视频
作者:cgDeepLearn 发布时间:2021-08-20 03:53:23
项目地址:
https://github.com/cgDeepLearn/BilibiliCrawler
项目特点
采取了一定的反反爬策略。
Bilibili更改了用户页面的api, 用户抓取解析程序需要重构。
快速开始
拉取项目, git clone https://github.com/cgDeepLearn/BilibiliCrawler.git
进入项目主目录,安装虚拟环境crawlenv(请参考使用说明里的虚拟环境安装)。
激活环境并在主目录运行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
来源:https://github.com/cgDeepLearn/BilibiliCrawler
猜你喜欢
- 在用Linux(OS:Centos 7.2)时看到有一行代码是:export PYTHONPATH=$PYTHONPATH:/home/us
- 处理前文件内容代码处理后的# 读取代码fr = open('three.txt', 'r')dic = {}
- 入职第一家公司做开发的时候使用的项目版本管理工具是svn,公司内部搭建的服务器;在第二、第三家公司做开发的时候,使用的项目版本管理工具是Gi
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:--sql中的 where 、group by 和 having 用法解析--如果要用到
- 本文实例讲述了python中dir函数用法。分享给大家供大家参考。具体分析如下:dir 函数返回任意对象的属性和方法列表,包括模块对象、函数
- 本文简单介绍如何使用 Python 的 pyautogui 模块实现鼠标的自动移动以及键盘的自行输入. 该模块不是 Python 自带的,
- 典型的方法就是对于主表的各数据字段进行更新或新增,对于从表一般都会先删除相关的所有记录,然后再进行插入。也就是说每次保存时,从表的数据都要重
- django台后默认上传文件名在不使用分布式文件存储系统等第三方文件存储时,django使用默认的后台ImageField和FileFiel
- Django在做后台系统过程中,我们通常都会为view函数添加 @login_required 装饰器,这个装饰器的主要作用就是在用户访问这
- 在Centos上部署项目发现一个奇怪的问题,数据库连接一直抛异常。于是花了两个小时搜了各种数据库连接异常导致的原因,最终问题得以解决。同时,
- 在CSS中我们会经常要用到“清除浮动”Clear,比较典型的就是clear:both;CSS手册上是这样说明的:该属性的值指出了不允许有浮动
- 本文实例讲述了Python爬虫之pandas基本安装与使用方法。分享给大家供大家参考,具体如下:一、简介:Python Data Analy
- 前端版本更新检查,实现页面自动刷新使用vite对项目进行打包,对 js 和 css 文件使用了 chunkhash 进行了文件缓存控制,但是
- 这篇文章主要介绍了Python动态声明变量赋值代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 示例代码: BulkStockBll bll = new BulkStockBll(); DataSet ds = bll.GetBulkS
- 科学设计你的网站网页:来自 Eye-Tracking研究的23节必修课 ——Christina Laun在网络设计领域关于Eye-
- 这几天在学习PyQt编程,用CSDN来记录一下学过的东西,免得以后忘记了大笑import sys from PyQt4 import QtG
- 作者:Henny Swan / co-lead of WaSP ILG译者:JunChen / member of WaSP ILG原文:h
- 帮朋友制作一个网站,需要一些产品数据信息,因为是代理其他公司产品,直接爬取代理公司产品数据1.设计数据库from django.db imp
- 不比2000有个 开关的程序 所以上网找了下教程 自己写个批处理 自动启动服务 哇哈哈 突然觉得 只要有网络 语言不是啥大的障碍 写起来都差