【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

这篇具有很好参考价值的文章主要介绍了【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录
  • 一、背景介绍
    • 1.1 爬取目标
    • 1.2 演示视频
    • 1.3 软件说明
  • 二、代码讲解
    • 2.1 爬虫采集模块
    • 2.2 软件界面模块
    • 2.3 日志模块
  • 三、获取源码及软件

一、背景介绍

1.1 爬取目标

您好!我是@马哥python说 ,一名10年程序猿。

我用python开发了一个爬虫采集软件,可自动按关键词抓取小红书笔记数据。

为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python,无需改代码,双击打开即用!

软件界面截图:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

爬取结果截图:

结果截图1:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

结果截图2:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

结果截图3:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

以上。

1.2 演示视频

软件运行演示:
【软件演示】小红书搜索采集工具,可同时多个关键词,并支持筛选笔记类型、排序等

1.3 软件说明

几点重要说明:

  1. Windows用户可直接双击打开使用,无需Python运行环境,非常方便!
  2. 需要填入cookie中的a1值和web_session值
  3. 支持按笔记类型(综合/视频/图文)和排序方式(综合/最新/最热)爬取
  4. 支持同时爬多个关键词
  5. 每个关键词最多可采集220条左右的笔记,与网页端数量一致
  6. 爬取过程中,有log文件详细记录运行过程,方便回溯
  7. 爬取完成后,自动导出结果到csv文件
  8. 爬取字段含:关键词, 页码, 笔记id, 笔记链接, 笔记标题, 笔记类型, 点赞数, 用户id, 用户主页链接, 用户昵称。

以上。

二、代码讲解

2.1 爬虫采集模块

首先,定义接口地址作为请求地址:

# 请求地址
url = 'https://edith.xiaohongshu.com/api/sns/web/v1/search/notes'

定义一个请求头,用于伪造浏览器:

# 请求头
h1 = {
	'Accept': 'application/json, text/plain, */*',
	'Accept-Encoding': 'gzip, deflate, br',
	'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
	'Content-Type': 'application/json;charset=UTF-8',
	'Cookie': '换成自己的cookie值',
	'Origin': 'https://www.xiaohongshu.com',
	'Referer': 'https://www.xiaohongshu.com/',
	'Sec-Ch-Ua': '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"',
	'Sec-Ch-Ua-Mobile': '?0',
	'Sec-Ch-Ua-Platform': '"macOS"',
	'Sec-Fetch-Dest': 'empty',
	'Sec-Fetch-Mode': 'cors',
	'Sec-Fetch-Site': 'same-site',
	'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0',
}

说明一下,cookie是个关键参数。

其中,cookie里的a1和web_session获取方法,如下:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

这两个值非常重要,软件界面需要填写!!

加上请求参数,告诉程序你的爬取条件是什么:

# 请求参数
post_data = {
	"keyword": search_keyword,
	"page": page,
	"page_size": 20,
	"search_id": v_search_id,
	"sort": v_sort,
	"note_type": v_note_type,
	"image_scenes": "FD_PRV_WEBP,FD_WM_WEBP",
}

下面就是发送请求和接收数据:

# 发送请求
r = requests.post(url, headers=h1, data=data_json.encode('utf8'))
print(r.status_code)
# 以json格式接收返回数据
json_data = r.json()

定义一些空列表,用于存放解析后字段数据:

# 定义空列表
note_id_list = []  # 笔记id
note_title_list = []  # 笔记标题
note_type_list = []  # 笔记类型
like_count_list = []  # 点赞数
user_id_list = []  # 用户id
user_name_list = []  # 用户昵称

循环解析字段数据,以"笔记标题"为例:

# 循环解析
for data in json_data['data']['items']:
	# 笔记标题
	try:
		note_title = data['note_card']['display_title']
	except:
		note_title = ''
	print('note_title:', note_title)
	note_title_list.append(note_title)

其他字段同理,不再赘述。

最后,是把数据保存到csv文件:

# 把数据保存到Dataframe
df = pd.DataFrame(
	{
		'关键词': search_keyword,
		'页码': page,
		'笔记id': note_id_list,
		'笔记链接': ['https://www.xiaohongshu.com/explore/' + i for i in note_id_list],
		'笔记标题': note_title_list,
		'笔记类型': note_type_list,
		'点赞数': like_count_list,
		'用户id': user_id_list,
		'用户主页链接': ['https://www.xiaohongshu.com/user/profile/' + i for i in user_id_list],
		'用户昵称': user_name_list,
	}
)
if os.path.exists(result_file):
	header = False
else:
	header = True
# 把数据保存到csv文件
df.to_csv(result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')

完整代码中,还含有:判断循环结束条件、js逆向解密、笔记类型(综合/视频图文)筛选、排序方式筛选(综合/最新/最热)等关键实现逻辑。

2.2 软件界面模块

主窗口部分:

# 创建主窗口
root = tk.Tk()
root.title('小红书搜索采集软件v1 | 马哥python说 |')
# 设置窗口大小
root.minsize(width=850, height=650)

输入控件部分:

# 搜索关键词
tk.Label(root, justify='left', text='搜索关键词:').place(x=30, y=160)
entry_kw = tk.Text(root, bg='#ffffff', width=60, height=2, )
entry_kw.place(x=125, y=160, anchor='nw')  # 摆放位置

底部版权部分:

# 版权信息
copyright = tk.Label(root, text='@马哥python说 All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)

以上。

2.3 日志模块

好的日志功能,方便软件运行出问题后快速定位原因,修复bug。

核心代码:

def get_logger(self):
	self.logger = logging.getLogger(__name__)
	# 日志格式
	formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
	# 日志级别
	self.logger.setLevel(logging.DEBUG)
	# 控制台日志
	sh = logging.StreamHandler()
	log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
	# info日志文件名
	info_file_name = time.strftime("%Y-%m-%d") + '.log'
	# 将其保存到特定目录,ap方法就是寻找项目根目录,该方法博主前期已经写好。
	case_dir = r'./logs/'
	info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
						when='MIDNIGHT',
						interval=1,
						backupCount=7,
						encoding='utf-8')

日志文件截图:
【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!

以上。

三、获取源码及软件

get完整源码:【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取


by 马哥python说文章来源地址https://www.toymoban.com/news/detail-759403.html

到了这里,关于【GUI软件】小红书搜索结果批量采集,支持多个关键词同时抓取!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • es的搜索结果处理

    elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。 1.1.普通字段排序 keyword、数值、日期类型排序的语法基本一致。 语法 : 排序条件是一个数组,也就是可以

    2024年02月01日
    浏览(67)
  • Elasticsearch(八)搜索---搜索辅助功能(上)--指定搜索返回字段,结果计数和分页

    前面我们已经将ES的基础操作(索引,映射,文档)学习过了,从这一章开始,我们便开始学习ES的最大的功能—搜索 ES为用户提供了丰富的搜索功能:既有基本的搜索功能,又有搜索建议功能;既有常用的普通类型的匹配功能,又有基于地理位置的搜索功能;既提供了分页搜

    2024年02月05日
    浏览(50)
  • 织梦dedecms在搜索结果页按栏目分类显示搜索数据

    搜索结果示范 1、搜索框代码里使用name=\\\"q\\\"作为搜索框属性,例如  2、打开 /include/taglib/arclist.lib.php 找到,大概在188行 $innertext = trim($innertext); 在它下面加入 preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $conditions); if(isset($_REQUEST[\\\'q\\\']) $keyword = \\\'~q~\\\') { preg_match(\\\"/~([A-Za-z0-9_]+)~/s\\\", $keyword, $cond

    2024年02月03日
    浏览(58)
  • 详解dedecms搜索页面单独调用搜索结果条数的实现方法

    DEDE的搜索结果数量都集成在了列表分页标签里,并没有使用单独的函数来提供这个结果数量,因此对有单独调用搜索结果数量的用户来说,就有使用问题,这里提供二次开发的方法。 非常简单只要修改几个地方就行了: 第一步,打开/include/arc.searchview.class.php文件,查找代码

    2024年02月02日
    浏览(55)
  • 帝国CMS搜索结果显示数量的实现方法

    最近在做帝国CMS的搜索功能,记录一下方便大家以后使用,本文主要讲解一下修改帝国CMS搜索结果每页显示的数量的两种方法。 1、方法一:在后台搜索模板中直接设置数量 在后台——系统——系统参数设置——搜索设置——页面设置,如下图: 2、方法二:直接更改搜索系

    2024年02月03日
    浏览(42)
  • 提升搜索效率-----使用chatGPT插件让搜索结果直接展示在谷歌界面右侧

    今天分享一个chatGPT的进阶玩法,使用谷歌浏览器插件的形式,将chatGPT植入到浏览器的搜索结果内。 而chatGPT会将你的搜索问题的结果,同步展示在谷歌搜索界面的右侧。 但还是要注意科学上网!!但毕竟谷歌也需要科学才能挤进去 以下为插件网址(火狐需要自己测试测试)

    2024年02月08日
    浏览(46)
  • 微服务分布式搜索引擎 ElasticSearch 搜索结果处理 排序、分页与高亮

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 elasticsearch默认是根据相关度算分(_score)来排序,但是也支

    2024年02月02日
    浏览(59)
  • Edge浏览器搜索栏固定为360搜索引擎 || 浏览器地址栏搜索,结果都是360搜索引擎

    搜索引擎的URL被篡改成了360搜索 ,很恶心。 打开 设置 = 隐私、搜索和服务 = 地址栏和搜索 (最下面) 可以看到可以选择 必应 或者 Google 再进入 管理搜索引擎 可以看到必应的URL已经被改成了 http://lx.pub/s?a=3b=%s ,正常应该是 https://www.bing.com/search?q=%s ,%s代表你搜索的内容。

    2024年02月10日
    浏览(59)
  • Elasticsearch --- DSL、RestClient查询文档、搜索结果处理

    elasticsearch的查询依然是基于JSON风格的DSL来实现的。   Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有 :查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询 :利用分词器对用户输入内容分词,然后去倒排

    2024年02月05日
    浏览(58)
  • vim 使用/进行关键字搜索,跳转到下一个搜索结果的快捷键

    在命令行中使用 `/` 或 `?` 向下或向上搜索指定的字符,字符可手动输入 或 粘贴指定寄存器里的字符输入。通过 ` n ` 或 ` N ` 继续 原方向 或 反向跳 转到下一个匹配到的位置。 此外还可以同时进行多个匹配()的搜索,不同匹配项之间使用` | `隔开即可。只要找到满足这

    2024年02月10日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包