爬虫 | 【实践】百度搜索链接爬取,生成标题词云 | 以“AI换脸”为例

目录

📚链接爬取

🐇流程梳理

🐇代码实现

🐇结果

📚词云生成

🐇代码实现

🐇结果


📚链接爬取

🐇流程梳理

  • 总体流程是:构建搜索链接 -> 发送HTTP请求 -> 解析网页内容 -> 提取标题和链接 -> 判断重复 -> 写入csv工作表 -> 保存csv工作簿

  • 循环遍历100页(暂定,实现翻页)的搜索结果,完成全部数据的提取和保存。

  • key:在百度搜索结果页面中,通常每个搜索结果都包含在一个<h3>标签内,并具有一个特定的CSS类名为"t"

🐇代码实现

# 发送HTTP请求并处理URL
import urllib
from urllib import request, parse
# 管理和处理HTTP请求和响应中的Cookie信息
import http.cookiejar
# 解析和提取HTML/XML数据
from bs4 import BeautifulSoup
# 读取和编辑数据
import openpyxl
import random
import time# 随机等待时间的函数
# 避免以高频率向服务器发送请求造成宕机
def random_wait():# 生成一个随机的等待时间,范围为1到5秒wait_time = random.uniform(1, 5)time.sleep(wait_time)# 创建一个新的Excel工作簿对象
workbook = openpyxl.Workbook()
# 返回工作簿中的活动工作表对象,表明之后的代码对这个工作表进行操作
worksheet = workbook.active
# 添加标题
worksheet.append(['Titles', 'Links'])
# 标题集合,用于之后重复标题的处理
titles_set = set()word = input("请输入搜索的关键词:")
for page in range(1, 101):print("现在是第" + str(page) + "页")# quote()函数用于将字符串进行URL编码link = "http://www.baidu.com/s?wd="+urllib.parse.quote(word)url = f"{link}?page={page}"headers = {"Accept": "text/html, application/xhtml+xml, image/jxr, */*","Accept - Encoding": "gzip, deflate, br","Accept - Language": "zh - CN","Connection": "Keep - Alive","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0",# 请求的来源页面"referer": "baidu.com"}# 创建一个CookieJar对象,用于保存网站返回的Cookie信息。Cookie = http.cookiejar.CookieJar()# 创建一个opener对象,使用CookieJar处理器来处理Cookie,实现Cookie的自动管理。opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(Cookie))# 将headers字典中的键值对转化为元组,并添加到headall列表中。pairs = []for key, value in headers.items():item = (key, value)pairs.append(item)# 将pairs列表设置为opener的请求头opener.addheaders = pairs# 将opener安装为全局默认的urlopen()函数的opener。urllib.request.install_opener(opener)# 发送请求并获取网页内容。data = urllib.request.urlopen(url).read().decode('utf-8')# 解析网页内容,生成BeautifulSoup对象。soup = BeautifulSoup(data, 'html.parser')# 查找名为'h3',class属性为't'的HTML元素# 在百度搜索结果页面中,通常每个搜索结果都包含在一个<h3>标签内,并具有一个特定的CSS类名为"t"。for result_table in soup.find_all('h3', class_='t'):# 调用等待时间函数,防止宕机random_wait()a_click = result_table.find("a")# 获取标题title = a_click.get_text()# 获取链接link = str(a_click.get("href"))# 如果标题已经存在于集合中,跳过此条记录,而且不要视频大全if title in titles_set or "视频大全" in title:continue# 将标题添加到集合中titles_set.add(title)print("标题:" + title)  # 标题print("链接:" + link)  # 链接worksheet.append([title, link])workbook.save('AI换脸_法律_案件.csv')

🐇结果

  • 关键词设置为:AI换脸 法律 案件

📚词云生成

🐇代码实现

  • 用爬取的全部标题来构建词云
# coding:utf-8
import jieba  # 导入分词库
import collections  # 导入collections库,用于词频统计
import wordcloud  # 导入生成词云图的库
import matplotlib.pyplot as plt  # 导入绘图库# 打开文件
with open(r"AI换脸_法律_案件.txt", encoding='utf-8') as f:data = f.read()# 使用jieba库进行分词,默认精确模式
w_cut = jieba.cut(data, cut_all=False)# 存储分词结果的列表
word_list = []
# 设置排除词
word_remove = [u',', u' ', u'。', u'、', u'\n', u'', u'(', u')',  u'“', u'”', u',', u'!', u'?', u'【', u'】', u'...', u'_', u':', '|', '-', u'的', u'是', u'了', u'我', u'我们', u'腾讯', u'哔哩', u'百度', u'新浪', u'你', u'又', u'被', u'他', u'谁', u'人']
# 遍历分词结果,过滤掉排除词,将有效词添加到word_list中
for x in w_cut:if x not in word_remove:word_list.append(x)  # 使用Counter进行词频统计
word_counts = collections.Counter(word_list)  
# 取出词频最高的前50个词
word_counts_top50 = word_counts.most_common(50)  
# 打印出前50个词云及对应数量
print(word_counts_top50)  
# 将词频结果转换为字符串形式
word_counts_top50 = str(word_counts_top50)  w = wordcloud.WordCloud(# 设置词云生成时的中文字体font_path='C:\Windows\Fonts\STKAITI.TTF',  # 设置词云的背景颜色为白色background_color='white',  # 设置词云图片的宽度width=700,  # 设置词云图片的高度height=600,  # 设置词云中显示的最大字体大小max_font_size=180  
)
# 根据词频生成词云图
w.generate_from_frequencies(word_counts)  
# 创建一个绘图窗口
plt.figure(1, figsize=(10, 8))  
# 显示词云图
plt.imshow(w)  
# 不显示坐标轴
plt.axis("off")  
# 展示图表
plt.show()  
# 将词云图保存为图片文件
w.to_file("wordcloud_input.png")  

  • 关于jieba.cut:除了 cut_all = False​,jieba库还支持以下模式:
    • cut_all = True​:全模式,将文本中的所有可能是词的部分都进行分词,可能会产生冗余和不常见的词。
    • cut_for_search = True​:搜索引擎模式,将文本中可能是词的部分进行分词,同时使用了较多的细粒度切分,适用于搜索引擎构建索引或相关场景。
    • HMM =True​:开启隐式马尔可夫模型(Hidden Markov Model),用于在未登录词(out-of-vocabulary,OOV)的情况下进行中文分词,适用于处理未登录词较多的场景。
  • 关于字体设置font_path='C:\Windows\Fonts\STKAITI.TTF',在控制面板 -> 外观与个性化 -> 字体处,可以找到心仪字体。

 

🐇结果


 补报错杂货铺:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/128116.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于爬虫API常见的技术问题和解答

随着互联网的快速发展&#xff0c;数据获取变得越来越重要。爬虫API作为一种高效的数据获取手段&#xff0c;被广泛应用于各种场景。然而&#xff0c;在实际使用过程中&#xff0c;我们经常会遇到一些技术问题。本文将详细介绍爬虫API的常见技术问题及相应的解决方案。 一、爬…

Cannot resolve class ‘DruidDataSource‘

无法配置 DataSource&#xff1a;未指定“url”属性&#xff0c;并且无法配置嵌入数据源。 原因&#xff1a;无法确定合适的驱动程序类 原因是数据库没有配置或者没事错误 1配置配置文件报错 没有依赖 pom.xml加入 <dependency><groupId>com.alibaba</grou…

Hydra(九头蛇海德拉)教程

Hydra 参数 hydra <参数> <IP地址> <服务名> 参数案例说明-l-l root登录账号-L-L userName.txt用户文件-p-l 123456登录密码-P-P passwd.txt密码文件-e-e nsrn 空密码 s 用户名即密码 r 用户名和密码相反&#xff08;如root的密码为toor&#xff09;-s-s 21指…

AM@微元法和定积分的应用@平面图形面积@立体体积@曲线弧长

文章目录 abstract微元法平面图形的面积极坐标上图形面积曲边扇形面积 平行截面面积为已知的立体体积旋转体的体积绕 x x x轴旋转绕 y y y轴旋转另一类型旋转体积 曲线弧长参数方程表示的曲线弧长直角坐标方程表示的曲线弧长极坐标方程表示得曲线弧长小结 abstract 微元法定积…

二维码智慧门牌管理系统:实现六实数据管理应用,让小区管理更便捷!

文章目录 前言一、引入六实数据管理应用二、人员管理三、房屋管理四、车辆管理五、安防管理六、公共信息管理 前言 在这个科技飞速发展的时代&#xff0c;传统小区管理方式已经无法满足人们对于安全、舒适和便捷的需求。而二维码智慧门牌管理系统作为新时代小区管理的利器&…

ViT Vision Transformer超详细解析,网络构建,可视化,数据预处理,全流程实例教程

关于ViT的分析和教程&#xff0c;网上又虚又空的东西比较多&#xff0c;本文通过一个实例&#xff0c;将ViT全解析。 包括三部分内容&#xff0c;网络构建&#xff1b;orchview.draw_graph 将网络每一层的结构与输入输出可视化&#xff1b;数据预处理。附完整代码 网络构建 …

mac下载安装jenkins

下载 https://get.jenkins.io/war/ 启动 使用命令行启动 java -jar jenkins.war 浏览器访问 IP:8080 或 localhost:8080 &#xff0c;对jenkins进行配置&#xff0c;刚开始需要输入密码 终端会展示密码和密码存放位置 jenkins插件下载地址&#xff0c; 下载后自行上传。 I…

不是我吹牛逼,这绝对是去掉 if...else 最佳的文章

我相信小伙伴一定看过多篇怎么去掉 if…else 的文章&#xff0c;也知道大家都很有心得&#xff0c;知道多种方法来去掉 if…else &#xff0c;比如 Option&#xff0c;策略模式等等&#xff0c;但我相信大明哥这篇文章绝对是最全&#xff0c;最完备怎么去掉 if…else 的文章&am…

Redis安装与配置及常用命令使用讲解

目录 一、Redis简介 二、Redis安装和配置 2.1 Linux版 2.2 Windows版 三、Redis命令 3.1 通过命令操作Redis 3.2 String 字符串 3.3 Hash 哈希 3.4 List 列表 3.5 Set 有序集合&#xff08;sorted set&#xff09; 一、Redis简介 Redis是一个开源的内存数据结构存储…

@Async注解使用说明

在Java中&#xff0c;Spring框架提供了一种强大的机制来处理并发任务。这种机制是通过使用Async注解来实现的。Async注解用于标记一个方法为异步方法&#xff0c;当这个方法被调用时&#xff0c;它将在一个单独的线程中执行&#xff0c;而不会阻塞主线程。 一、Async注解的使用…

vue的入门第一课

Vue.js是一款流行的JavaScript框架&#xff0c;用于构建交互式Web应用程序。本文将详细介绍Vue.js的基础知识&#xff0c;包括Vue.js的历史、设计模式、构造函数参数、el、data、computed、method、watch以及差值的使用。 Vue.js是什么&#xff1f; Vue.js是一款用于构建用户…

SCSS的用法有哪些?分别举例

SCSS的用法主要有&#xff1a; 1&#xff1a; 变量&#xff1a;在SCSS中&#xff0c;我们可以通过 $ 符号来定义变量。比如&#xff0c;我们可以定义一个颜色变量 $color: red;&#xff0c;然后在我们需要使用这个颜色的时候&#xff0c;直接使用 $color 就可以了。 2&#x…

【Linux基础IO篇】系统文件接口(1)

【Linux基础IO篇】系统文件接口&#xff08;1&#xff09; 目录 【Linux基础IO篇】系统文件接口&#xff08;1&#xff09;回顾C语言的文件接口系统文件I/Oopen接口的介绍 open函数返回值文件描述符fd&#xff08;小整数&#xff09;文件描述符的分配规则 重定向dup2系统调用改…

JavaScript 中判断数据类型的多种方法

在 JavaScript 中&#xff0c;准确地判断一个数据的类型是非常重要的。这可以帮助我们更好地理解和操作数据&#xff0c;以及在编写代码时做出更明智的决策。 1.使用 typeof 运算符 typeof 运算符可以返回一个值的类型。但需要注意的是&#xff0c;它有一些局限性。例如&#…

Py之auto-gptq:auto-gptq的简介、安装、使用方法之详细攻略

Py之auto-gptq&#xff1a;auto-gptq的简介、安装、使用方法之详细攻略 目录 auto-gptq的简介 1、版本更新历史 2、性能对比 推理速度 困惑度&#xff08;PPL&#xff09; 3、支持的模型 3、支持的评估任务 auto-gptq的安装 auto-gptq的使用方法 1、基础用法 (1)、量…

《C语言从入门到精通》:入门容易,精通难,C语言也不例外

《C语言从入门到精通》&#xff1a;入门容易&#xff0c;精通难&#xff0c;C语言也不例外 C语言&#xff0c;容易上手&#xff0c;难以精通。它是一把双刃剑&#xff0c;既打开了编程世界的大门&#xff0c;又需要耐心与热情。无论是初学者还是专业人士&#xff0c;都需不断钻…

苹果cms论坛多播放源自动采集在线影视网站

苹果 cms 论坛一个基于 vue 和 gin 实现的在线观影网站 项目采用 vite vue 作为前端技术栈, 使用 ElementPlus 作为 UI 框架进行开发 后端程序使用 Gin gorm go-redis 等相关框架提供接口服务, 使用 gocolly 和 robfig/cron 进行公共影视资源采集和定时更新功能 目前用户…

java连接zookeeper

API ZooKeeper官方提供了Java API&#xff0c;可以通过Java代码来连接zookeeper服务进行操作。可以连接、创建节点、获取节点数据、监听节点变化等操作&#xff0c;具体有以下几个重要的类&#xff1a; ZooKeeper&#xff1a;ZooKeeper类是Java API的核心类&#xff0c;用于与…

vue 使用vue-office预览word、excel,pdf同理

在此&#xff0c;我只使用了docx和excel&#xff0c; pdf我直接使用的iframe进行的展示就不作赘述了 //docx文档预览组件 npm install vue-office/docx//excel文档预览组件 npm install vue-office/excel//pdf文档预览组件 npm install vue-office/pdf如果是vue2.6版本或以下还…

2.Spark的工作与架构原理

概述 目标&#xff1a; spark的工作原理spark数据处理通用流程rdd 什么是rddrdd 的特点 spark架构 spark架构相关进程spark架构原理 spark的工作原理 spark 的工作原理&#xff0c;如下图 图中中间部分是spark集群&#xff0c;也可以是基于 yarn 的&#xff0c;图上可以…