程序设置

April 28, 2024 · View on GitHub

源码下载安装的用户在weiboSpider目录下运行如下命令,pip安装的用户在任意有写权限的目录运行如下命令:

$ python3 -m weibo_spider

第一次运行会生成config.json文件,请打开config.json文件,你会看到如下内容:

{
    "user_id_list": ["1669879400"],
    "filter": 1,
    "since_date": "2018-01-01",
    "end_date": "now",
    "random_wait_pages": [1, 5],
    "random_wait_seconds": [6, 10],
    "global_wait": [[1000, 3600], [500, 2000]],    
    "write_mode": ["csv", "txt"],
    "pic_download": 1,
    "video_download": 1,
    "result_dir_name": 0,
    "cookie": "your cookie",
    "mysql_config": {
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "charset": "utf8mb4"
    },
    "sqlite_config": "weibo.db"
}

下面讲解每个参数的含义与设置方法。

设置user_id_list

user_id_list是我们要爬取的微博的id,可以是一个,也可以是多个,例如:

"user_id_list": ["1223178222", "1669879400", "1729370543"],

上述代码代表我们要连续爬取user_id分别为“1223178222”、 “1669879400”、 “1729370543”的三个用户的微博,具体如何获取user_id见如何获取user_id

user_id_list的值也可以是文件路径,我们可以把要爬的所有微博用户的user_id都写到txt文件里,然后把文件的位置路径赋值给user_id_list,推荐这种方式

在txt文件中,每个user_id占一行,也可以在user_id后面加注释(可选),如用户昵称等信息,user_id和注释之间必需要有空格,文件名任意,类型为txt,位置位于本程序的同目录下,文件内容示例如下:

1223178222 胡歌
1669879400 迪丽热巴
1729370543 郭碧婷

假如文件叫user_id_list.txt,则user_id_list设置代码为:

"user_id_list": "user_id_list.txt",

设置filter

filter控制爬取范围,值为1代表爬取全部原创微博,值为0代表爬取全部微博(原创+转发)。例如,如果要爬全部原创微博,请使用如下代码:

"filter": 1,

设置since_date

since_date值可以是日期,也可以是整数。如果是日期,代表爬取该日期之后的微博,格式应为“yyyy-mm-dd”,如:

"since_date": "2018-01-01",

代表爬取从2018年1月1日到现在的微博。

如果是整数,代表爬取最近n天的微博,如:

"since_date": 10,

代表爬取最近10天的微博,这个说法不是特别准确,准确说是爬取发布时间从10天前到本程序开始执行时之间的微博。

since_date是所有user的爬取起始时间,非常不灵活。如果你要爬多个用户,并且想单独为每个用户设置一个since_date,可以使用定期自动爬取微博方法二中的方法,该方法可以为多个用户设置不同的since_date,非常灵活。

设置end_date

end_date值可以是日期,也可以是"now"。如果是日期,代表爬取该日期之前的微博,格式应为“yyyy-mm-dd”;如果是"now",代表爬取发布日期从since_date到现在的微博。since_date配合end_date,表示爬取发布日期在since_date和end_date之间的微博,包含边界。since_date是起始日期,end_date是结束日期,因此end_date时间应晚于since_date。注意,since_date即可以通过config.json文件的since_date参数设置,也可以通过user_id_list.txt设置;而end_date只能通过config.json文件的end_date参数设置,是全局变量,所有user_id都使用同一个end_date。

推荐使用"now"作为end_date值,当值为"now"时,获取结果是正确和稳定的;当end_date值不是"now"时,在爬微博数非常多的账号时,程序可能不稳定,得到很多空微博页,并且此时无法获取微博中的视频,如果想要获取视频,请为end_date赋值为"now"。

设置random_wait_pages

random_wait_pages值是一个长度为2的整数列表,代表每爬取x页微博暂停一次,x为整数,值在random_wait_pages列表两个整数之间随机获取。默认值为[1, 5],代表每爬取1到5页暂停一次,如果程序被限制,可以加快暂停频率,即适当减小random_wait_pages内的值。

设置random_wait_seconds

random_wait_seconds值是一个长度为2的整数列表,代表每次暂停sleep x 秒,x为整数, 值在random_wait_seconds列表两个整数之间随机获取。默认值为[6, 10],代表每次暂停sleep 6到10秒,如果程序被限制,可以增加等待时间,即适当增大random_wait_seconds内的值。

设置global_wait

global_wait控制全局等待时间,默认值为[[1000, 3600], [500, 2000]],代表获取1000页微博,程序一次性暂停3600秒;之后获取500页微博,程序再一次性暂停2000秒;之后如果再获取1000页微博,程序一次性暂停3600秒,以此类推。默认的只有前面的两个全局等待时间([1000, 3600]和[500, 2000]),可以设置多个,如值可以为[[1000, 3600], [500, 3000], [700, 3600]],程序会根据配置依次等待对应时间,如果配置全部被使用,程序会从第一个配置开始,依次使用,循环往复。

设置write_mode

write_mode控制结果文件格式,取值范围是csv、txt、json、mongo、mysql和sqlite,分别代表将结果文件写入csv、txt、json、MongoDB、MySQL和SQLite数据库。write_mode可以同时包含这些取值中的一个或几个,如:

"write_mode": ["csv", "txt"],

代表将结果信息写入csv文件和txt文件。特别注意,如果你想写入数据库,除了在write_mode添加对应数据库的名字外,还应该安装相关数据库和对应python模块,具体操作见设置数据库部分。

设置pic_download

pic_download控制是否下载微博中的图片,值为1代表下载,值为0代表不下载,如

"pic_download": 1,

代表下载微博中的图片。

设置video_download

video_download控制是否下载微博中的视频,值为1代表下载,值为0代表不下载,如

"video_download": 1,

代表下载微博中的视频。

设置result_dir_name

result_dir_name控制结果目录的名字,可选值为0和1,默认值为0:

"result_dir_name": 0,

值为0表示将结果文件保存在以用户昵称为名的文件夹里,这样结果更清晰;值为1表示将结果保存在以用户id为名的文件夹里,这样更能保证多次爬取的一致性,因为用户昵称可以改变,用户id是不变的。

请按照如何获取cookie,获取cookie,然后将“your cookie”替换成真实的cookie值。

设置mysql_config(可选)

mysql_config控制mysql参数配置。如果你不需要将结果信息写入mysql,这个参数可以忽略,即删除或保留都无所谓;如果你需要写入mysql且config.json文件中mysql_config的配置与你的mysql配置不一样,请将该值改成你自己mysql中的参数配置。

设置sqlite_config(可选)

sqlite_config控制SQLite参数配置,代表SQLite数据库的保存路径,可根据自己需求修改。

设置数据库(可选)

本部分是可选部分,如果不需要将爬取信息写入数据库,可跳过这一步。本程序目前支持MySQL数据库和MongoDB数据库,如果你需要写入其它数据库,可以参考这两个数据库的写法自己编写。

MySQL数据库写入

要想将爬取信息写入MySQL,请根据自己的系统环境安装MySQL,然后命令行执行:

$ pip install pymysql

MongoDB数据库写入

要想将爬取信息写入MongoDB,请根据自己的系统环境安装MongoDB,然后命令行执行:

$ pip install pymongo

connection_string是MongoDB标准URI:

mongodb://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]

dba_name和dba_password对应URI中的username和password。如果没有访问限制可不填。 无访问限制的例子:

"connection_string": "mongodb://localhost:27017/weibo",

使用用户名和密码的例子:

"connection_string": "mongodb://admin:password@localhost:27017/weibo",
"dba_name": "",
"dba_password": "",

"connection_string": "mongodb://localhost:27017/weibo",
"dba_name": "admin",
"dba_password": "password",

MySQL和MongDB数据库的写入内容一样。程序首先会创建一个名为"weibo"的数据库,然后再创建"user"表和"weibo"表,包含爬取的所有内容。爬取到的微博用户信息或插入或更新,都会存储到user表里;爬取到的微博信息或插入或更新,都会存储到weibo表里,两个表通过user_id关联。如果想了解两个表的具体字段,请点击"详情"。

详情
  • user表
  • id:存储用户id,如"1669879400";
  • nickname:存储用户昵称,如"Dear-迪丽热巴";
  • gender:存储用户性别;
  • location:存储用户所在地;
  • birthday:存储用户出生日期;
  • description:存储用户简介;
  • verified_reason:存储用户认证;
  • talent:存储用户标签;
  • education:存储用户学习经历;
  • work:存储用户工作经历;
  • weibo_num:存储微博数;
  • following:存储关注数;
  • followers:存储粉丝数。

  • weibo表
  • id:存储微博id;
  • user_id:存储微博发布者的用户id,如"1669879400";
  • content:存储微博正文;
  • article_url:存储微博中头条文章的url,若微博中不存在头条文章,则值为'';
  • original_pictures:存储原创微博的原始图片url和转发微博转发理由中的图片url。若某条微博有多张图片,则存储多个url,以英文逗号分割;若某微博没有图片,则值为"无";
  • retweet_pictures:存储被转发微博中的原始图片url。当最新微博为原创微博或者为没有图片的转发微博时,则值为"无",否则为被转发微博的图片url。若有多张图片,则存储多个url,以英文逗号分割;
  • publish_place:存储微博的发布位置。如果某条微博没有位置信息,则值为"无";
  • publish_time:存储微博的发布时间;
  • up_num:存储微博获得的点赞数;
  • retweet_num:存储微博获得的转发数;
  • comment_num:存储微博获得的评论数;
  • publish_tool:存储微博的发布工具。

设置API接口POST联动(可选)

本部分是可选部分,如果不需要将爬取信息通过POST请求发送到指定API接口,可跳过这一步

请求数据格式为 content-type : application/json,接口响应返回也需要是 content-type : application/json,HTTP状态码为 200

数据主体与 write_mode 配置的 json 输出格式一致,是整页获取数据json,每页POST发送一次

api_url 为指定的API接口地址

api_token 为接口鉴权TOKEN,将在 Request Headers 中添加 api-token 字段,根据需要配置