爬虫 | 【实践】百度搜索链接爬取,生成标题词云 | 以“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.rhkb.cn/news/176510.html

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

相关文章

脉冲输出的三种模式

1.脉冲 方向 2.CW/CCW 3.A/B相&#xff08;AB正交脉冲&#xff09; 脉冲输出模式&#xff1a; 是指控制信号是单脉冲方式还是双脉冲方式&#xff0c;主要由控制器决定&#xff1b; 如果控制器发送的控制脉冲是单脉冲控制方式&#xff0c;驱动器需要采用单脉冲&#xff1b…

为什么要安装防静电门禁闸机

安装防静电门禁闸机可以带来以下几个方面的好处&#xff1a; 防止静电干扰&#xff1a;静电是一种非常危险的物理现象&#xff0c;它可以对电子元器件、电路板和其他敏感设备造成损害&#xff0c;甚至导致设备故障和生产中断。防静电门禁闸机可以有效地防止静电的产生和传导&am…

Spring Security 中自定义权限表达式

Spring Security 中自定义权限表达式 一. SpEL中使用自定义Bean二. 通过类继承自定义权限表达式2.1 自定义 ExpressionRoot 三. 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在…

Linux学习第27天:Platform设备驱动开发(一): 专注与分散

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 专注与分散是我在题目中着重说明的一个内容。这是今天我们要学习分离与分层概念的延伸。专注是说我们要专注某层驱动的开发&#xff0c;而对于其他层则是芯片厂商…

robot framework导入库和资源

robot framework导入库和资源 一 导入系统库和第三方库&#xff08;Library&#xff09;二 导入自己写的py文件三 建立资源作为关键字3.1 创建资源3.2 在资源里创建用户关键字3.3 使用用户关键字 四 将自己写的py文件中类的函数作为关键字4. 1编写py文件&#xff0c;文件名和里…

搭建VM虚拟机+Centos7 Oracle版 + 配置ssh + Xftp + secureCRT

文章目录 1 视频地址1.1 基本参数1.2 ISO下载地址&#xff1a;1.3 开启ssh1.3.1 使用root用户进行1.3.2 修改ssh配置1.3.3 关闭 SELINUX 2 查询虚拟机的ip2.1 联网2.2 桌面打开终端查询虚拟机ip 3 连接Xftp4 连接SecureRT 1 视频地址 01-搭建VM虚拟机Centos7 Oracle版 配置ss…

计算机网络-IP地址

文章目录 子网划分定长子网划分子网划分的方法子网掩码 可变长子网划分 无类别编址网络前缀路由聚合 特殊用途的IP地址专用网络地址链路本地地址运营商级NAT共享地址用于文档的测试网络地址 IP地址的规划和分配IP地址的规划和分配方法IP地址的规划和分配实例 子网划分 定长子网…

基于未来搜索算法的无人机航迹规划-附代码

基于未来搜索算法的无人机航迹规划 文章目录 基于未来搜索算法的无人机航迹规划1.未来搜索搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用未来搜索算法来优化无人机航迹规划。 …

装备制造行业云MES解决方案

一、装备制造行业发展现状&#xff1a; 机械制造业主要是通过对金属原材料物理形状的改变、加工组装进而成为产品。机械制造业生产的主要特点是&#xff1a;离散为主、流程为辅、装配为重点。 工业生产基本上分为两大方式&#xff1a; 1.离散型&#xff1a;离散型是指以一个…

《数据安全与流通:技术、架构与实践》新书发布

随着数据成为关键生产资料和要素&#xff0c;国内外数据安全相关的法律法规在快速完善&#xff0c;数据安全技术也在快速发展。5月25-26日&#xff0c;由星环科技、上海数据交易所、上海大数据联盟、财联社联合主办的向星力未来数据技术峰会 &#xff08;FDTC&#xff09;上&am…

C#__委托delegate

委托存储的是函数的引用&#xff08;把某个函数赋值给一个委托类型的变量&#xff0c;这样的话这个变量就可以当成这个函数来进行使用了&#xff09; 委托类型跟整型类型、浮点型类型一样&#xff0c;也是一种类型&#xff0c;是一种存储函数引用的类型 using System.Reflec…

目标检测理论知识

目标检测 1.基本概念 目标检测&#xff08;Object Detection&#xff09;的任务是找出图像中所有感兴趣的目标&#xff08;物体&#xff09;&#xff0c;确定它们的类别和位置&#xff0c;是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态&#xff0c;…

安装最新版vue-cli,并搭建一个vue2项目

安装最新版vue-cli&#xff0c;并搭建一个vue2项目 卸载旧版本环境 卸载node.js 可以使用qq电脑管家&#xff0c;找到nodejs卸载即可 cmd查看vue cli版本&#xff08;可以看到我们是vue cli 2.x&#xff09; C:\Users\youzhengjie666> vue -V 2.9.6卸载vue cli 2.x np…

CMake:构建时为特定目标运行自定义命令

CMake&#xff1a;构建时为特定目标运行自定义命令 导言项目结构相关源码结果 导言 add_custom_command 是 CMake 中用于添加自定义构建规则的命令&#xff0c;通常用于在编译项目时执行一些自定义操作&#xff0c;例如生成文件、运行脚本等。 项目结构 . ├── CMakeLists…

VMware虚拟网络连接的三种方式

桥接模式(Bridged) 什么是桥接模式?桥接模式就是将主机网卡与虑拟机虑拟的网卡利用虑拟网桥进行通信。在桥接的作用下&#xff0c;类似于把物理主机虑拟为一个交换机&#xff0c;所有桥接设置的虚拟机连接到这个交换机的一个接口上&#xff0c;物理主机也同样插在这个交换机当…

IDEA MyBatisX插件介绍

一、前言 前几年写代码的时候&#xff0c;要一键生成DAO、XML、Entity基础代码会采用第三方工具&#xff0c;比如mybatis-generator-gui等&#xff0c;现在IDEA或Eclipse都有对应的插件&#xff0c;像IDEA中MyBatisX就是一个比较好用的插件。 二、MyBatisX安装配置使用 MyBa…

HTML光速入门----(有这一篇就够了~!)

前言 因为是博主的平时自己的笔记所以截图和写的方式有点随意&#xff0c;还请大家多多谅解&#xff0c;有什么不对的地方&#xff0c;可以直接在评论区指出问题&#xff0c;感谢大家的指点和阅读我的文章 如果需要这里面演示的html&#xff0c;可以私信我&#xff0c;我会统一…

[黑马程序员Pandas教程]——Pandas快速体验

目录&#xff1a; 为什么要使用Python做数据开发Python在数据开发领域的优势为什么要学习Pandas其他常用Python库介绍主要内容介绍Anaconda安装Anaconda的虚拟环境管理虚拟环境的作用可以通过Anaconda界面创建虚拟环境通过命令行创建虚拟环境通过Anaconda管理界面安装包也可以…

Web3 React项目Dapp获取智能合约对象

上文Web3 整理React项目 导入Web3 并获取区块链信息中&#xff0c;我们在react搭建的dapp中简单拿到了我们区块链中的账号授权信息 那 我们继续 先终端运行 ganache -d将ganache环境起起来 然后 我们运行 dapp 拿到授权列表 回到上文结束的一个状态 然后 我们发布一下自己的…

【设计模式】第22节:行为型模式之“状态模式”

一、简介 状态模式一般用来实现状态机&#xff0c;而状态机常用在游戏、工作流引擎等系统开发中。不过&#xff0c;状态机的实现方式有多种&#xff0c;除了状态模式&#xff0c;比较常用的还有分支逻辑法和查表法。该模式允许对象内部状态改变使改变它的行为。 二、适用场景…