效果演示
普通人的搜索方式,我们直接在微博网页版 中搜索关键词
但是程序员可以通过脚本进行快速获取!
最终可以生成CSV文件,方便分析
功能介绍
针对微博内容进行个性化检索,导出
- 支持关键词(单个关键词 ,同时包含多个关键词 )
- 支持时间筛选(初始时间 、结束时间 )
- 支持微博来源筛选(原创微博 、热门微博 、关注人微博 、认证用户微博 、媒体微博 、观点微博 )
- 支持微博类型筛选(全部微博 、包含图片 的微博、包含视频 的微博、包含音乐 的微博、包含短链接 的微博)
- 支持地区筛选(精确到省或直辖市,可以同时包含多个地区)
- 支持自定义访问频率
同时可以导出多种格式的结果
- csv文件 (默认)
- MySQL数据库 (可选)
- MongoDB数据库 (可选)
对于图片 或者视频 附件也可以选择性进行下载
下载工具
以下步骤默认您已经下载好项目并解压缩了!
安装Scrapy
pip install scrapy
安装依赖
pip install -r requirements.txt
搜索配置
详见weibo-search/weibo/settings.py
其中有详细的注释
# -*- coding: utf-8 -*-
BOT_NAME = 'weibo'
SPIDER_MODULES = ['weibo.spiders']
NEWSPIDER_MODULE = 'weibo.spiders'
COOKIES_ENABLED = False
TELNETCONSOLE_ENABLED = False
LOG_LEVEL = 'ERROR'
# 访问完一个页面再访问下一个时需要等待的时间,默认为10秒
DOWNLOAD_DELAY = 10
DEFAULT_REQUEST_HEADERS = {
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',
'cookie': 'your cookie'
}
ITEM_PIPELINES = {
'weibo.pipelines.DuplicatesPipeline': 300,
'weibo.pipelines.CsvPipeline': 301,
# 'weibo.pipelines.MysqlPipeline': 302,
# 'weibo.pipelines.MongoPipeline': 303,
# 'weibo.pipelines.MyImagesPipeline': 304,
# 'weibo.pipelines.MyVideoPipeline': 305
}
# 要搜索的关键词列表,可写多个, 值可以是由关键词或话题组成的列表,也可以是包含关键词的txt文件路径,
# 如'keyword_list.txt',txt文件中每个关键词占一行
KEYWORD_LIST = ['迪丽热巴'] # 或者 KEYWORD_LIST = 'keyword_list.txt'
# 要搜索的微博类型,0代表搜索全部微博,1代表搜索全部原创微博,2代表热门微博,3代表关注人微博,4代表认证用户微博,5代表媒体微博,6代表观点微博
WEIBO_TYPE = 1
# 筛选结果微博中必需包含的内容,0代表不筛选,获取全部微博,1代表搜索包含图片的微博,2代表包含视频的微博,3代表包含音乐的微博,4代表包含短链接的微博
CONTAIN_TYPE = 0
# 筛选微博的发布地区,精确到省或直辖市,值不应包含“省”或“市”等字,如想筛选北京市的微博请用“北京”而不是“北京市”,想要筛选安徽省的微博请用“安徽”而不是“安徽省”,可以写多个地区,
# 具体支持的地名见region.py文件,注意只支持省或直辖市的名字,省下面的市名及直辖市下面的区县名不支持,不筛选请用“全部”
REGION = ['全部']
# 搜索的起始日期,为yyyy-mm-dd形式,搜索结果包含该日期
START_DATE = '2022-01-01'
# 搜索的终止日期,为yyyy-mm-dd形式,搜索结果包含该日期
END_DATE = '2022-10-11'
# 进一步细分搜索的阈值,若结果页数大于等于该值,则认为结果没有完全展示,细分搜索条件重新搜索以获取更多微博。数值越大速度越快,也越有可能漏掉微博;数值越小速度越慢,获取的微博就越多。
# 建议数值大小设置在40到50之间。
FURTHER_THRESHOLD = 46
# 图片文件存储路径
IMAGES_STORE = './'
# 视频文件存储路径
FILES_STORE = './'
# 配置MongoDB数据库
# MONGO_URI = 'localhost'
# 配置MySQL数据库,以下为默认配置,可以根据实际情况更改,程序会自动生成一个名为weibo的数据库,如果想换其它名字请更改MYSQL_DATABASE值
# MYSQL_HOST = 'localhost'
# MYSQL_PORT = 3306
# MYSQL_USER = 'root'
# MYSQL_PASSWORD = '123456'
# MYSQL_DATABASE = 'weibo'
如何获取Cookie?填到哪里?
打开微博,F12打开开发者工具 ,刷新页面,找到index ,复制右侧的Cookie内容即可
然后填入我们刚才提到的settings.py 文件中
DEFAULT_REQUEST_HEADERS = {
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',
'cookie': 'Cookie复制到这里'
}
在第15行 Cookie复制到这里 的位置填入你的cookie
'cookie': 'Cookie复制到这里'
运行脚本
scrapy crawl search -s JOBDIR=crawls/search
实战分享
这里又回到了开头,如果我们想获取关于西北工业大学NSA事件 相关的报道,我们可以对settings.py 进行以下配置
代码第27行,我们首先要确定我们要索引的关键词
KEYWORD_LIST = ['西北工业大学NSA,西工大NSA']
第29行,我们要确定微博来源,我们选择原创微博
其他参数您也可以参考
0代表搜索全部微博,1代表搜索全部原创微博,2代表热门微博,3代表关注人微博,4代表认证用户微博,5代表媒体微博,6代表观点微博
WEIBO_TYPE = 1
第31行,我们不进行筛选
筛选结果微博中必需包含的内容,0代表不筛选,获取全部微博,1代表搜索包含图片的微博,2代表包含视频的微博,3代表包含音乐的微博,4代表包含短链接的微博
CONTAIN_TYPE = 0
第34行,我们这里看全部的,当然您也可以在设置时,看某个地区的
筛选微博的发布地区,精确到省或直辖市,值不应包含“省”或“市”等字,如想筛选北京市的微博请用“北京”而不是“北京市”,想要筛选安徽省的微博请用“安徽”而不是“安徽省”,可以写多个地区,详见region.py
REGION = ['全部']
第36行,选择微博的起始时间
搜索的起始日期,为yyyy-mm-dd形式,搜索结果包含该日期
START_DATE = '2022-09-01'
第38行,选择微博的结束时间
搜索的终止日期,为yyyy-mm-dd形式,搜索结果包含该日期
END_DATE = '2022-10-11'
然后就可以开始运行了!
scrapy crawl search -s JOBDIR=crawls/search
完整的settings.py代码我也放在下方
# -*- coding: utf-8 -*-
BOT_NAME = 'weibo'
SPIDER_MODULES = ['weibo.spiders']
NEWSPIDER_MODULE = 'weibo.spiders'
COOKIES_ENABLED = False
TELNETCONSOLE_ENABLED = False
LOG_LEVEL = 'ERROR'
# 访问完一个页面再访问下一个时需要等待的时间,默认为10秒
DOWNLOAD_DELAY = 10
DEFAULT_REQUEST_HEADERS = {
'Accept':
'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-US;q=0.7',
'cookie': '填你自己的Cookie哦'
}
ITEM_PIPELINES = {
'weibo.pipelines.DuplicatesPipeline': 300,
'weibo.pipelines.CsvPipeline': 301,
# 'weibo.pipelines.MysqlPipeline': 302,
# 'weibo.pipelines.MongoPipeline': 303,
# 'weibo.pipelines.MyImagesPipeline': 304,
# 'weibo.pipelines.MyVideoPipeline': 305
}
# 要搜索的关键词列表,可写多个, 值可以是由关键词或话题组成的列表,也可以是包含关键词的txt文件路径,
# 如'keyword_list.txt',txt文件中每个关键词占一行
KEYWORD_LIST = ['西北工业大学NSA,西工大NSA'] # 或者 KEYWORD_LIST = 'keyword_list.txt'
# 要搜索的微博类型,0代表搜索全部微博,1代表搜索全部原创微博,2代表热门微博,3代表关注人微博,4代表认证用户微博,5代表媒体微博,6代表观点微博
WEIBO_TYPE = 1
# 筛选结果微博中必需包含的内容,0代表不筛选,获取全部微博,1代表搜索包含图片的微博,2代表包含视频的微博,3代表包含音乐的微博,4代表包含短链接的微博
CONTAIN_TYPE = 0
# 筛选微博的发布地区,精确到省或直辖市,值不应包含“省”或“市”等字,如想筛选北京市的微博请用“北京”而不是“北京市”,想要筛选安徽省的微博请用“安徽”而不是“安徽省”,可以写多个地区,
# 具体支持的地名见region.py文件,注意只支持省或直辖市的名字,省下面的市名及直辖市下面的区县名不支持,不筛选请用“全部”
REGION = ['全部']
# 搜索的起始日期,为yyyy-mm-dd形式,搜索结果包含该日期
START_DATE = '2022-09-01'
# 搜索的终止日期,为yyyy-mm-dd形式,搜索结果包含该日期
END_DATE = '2022-10-11'
# 进一步细分搜索的阈值,若结果页数大于等于该值,则认为结果没有完全展示,细分搜索条件重新搜索以获取更多微博。数值越大速度越快,也越有可能漏掉微博;数值越小速度越慢,获取的微博就越多。
# 建议数值大小设置在40到50之间。
FURTHER_THRESHOLD = 46
# 图片文件存储路径
IMAGES_STORE = './images'
# 视频文件存储路径
FILES_STORE = './videos'
# 配置MongoDB数据库
# MONGO_URI = 'localhost'
# 配置MySQL数据库,以下为默认配置,可以根据实际情况更改,程序会自动生成一个名为weibo的数据库,如果想换其它名字请更改MYSQL_DATABASE值
# MYSQL_HOST = 'localhost'
# MYSQL_PORT = 3306
# MYSQL_USER = 'root'
# MYSQL_PASSWORD = '123456'
# MYSQL_DATABASE = 'weibo'
运行完成后,我们可以看到这里多了个结果文件
最终得到相关的excel文件
打开之后,我们可以根据转发数等参数进行筛选,找到用户阅读比较多的文章,进一步分析