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

news2025/7/22 22:09:06

目录

📚链接爬取

🐇流程梳理

🐇代码实现

🐇结果

📚词云生成

🐇代码实现

🐇结果


📚链接爬取

🐇流程梳理

  • 总体流程是:构建搜索链接 -> 发送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.coloradmin.cn/o/1157052.html

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

相关文章

解决Linux Debian12系统中安装VirtualBox虚拟机无法使用USB设备的问题

Debian12系统中安装VirtualBox&#xff0c;再VirtualBox虚拟机中无法使用 USB设备。如下图所示&#xff1a; 解决方法如下&#xff1a; 1.安装 Virtualbox增强功能。如下图所示&#xff1a; 2.添加相关用户、用户组&#xff08; Virtualbox 装完成后会有 vboxusers 和 vboxs…

初学编程学什么语言,中文编程系统化教程课程之自定义图形窗口自定义标题栏编程,零基础学编程轻松学编程

初学编程学什么语言&#xff0c;中文编程系统化教程课程之自定义图形窗口自定义标题栏编程&#xff0c;零基础学编程轻松学编程 该编程工具开发的系列管理软件 编程系统化课程总目录及明细&#xff0c;零基础学编程视频教程&#xff0c;点击进入了解详情。 https://blog.csdn.n…

无法ping通ECS服务器公网IP的排查方法

无法ping通ECS实例的原因较多&#xff0c;您可以参考九河云编辑的文章进行排查。 问题现象 本地客户端无法ping通目标ECS实例公网IP&#xff0c;例如&#xff1a; 本地客户端为Linux系统&#xff0c;ping目标ECS实例公网IP时无响应&#xff0c;如下所示&#xff1a; 本地客…

Java日志组件之三Log4j2漏洞剖析及重现

一、前言 这一篇我们来介绍一下史上第二严重的安全漏洞是个什么情况&#xff0c;原理是什么&#xff0c;如何重现。 二、Log4j2 Lookup机制 Log4j2 Lookup机制最重要的功能就是提供一个可扩展的方式让你可以添加某些特殊的值到日志中。你调用logger.info(name);这样的语句&a…

【赠书第1期】零基础学无人机航拍与短视频后期剪辑实战教程

文章目录 前言 1 购买前须知 2 准备工作 3 飞行控制 4 拍摄技巧 5 安全提示 6 推荐图书 7 粉丝福利 前言 随着科技的不断发展&#xff0c;无人机已经不再是军事装备的专属&#xff0c;它已经成为了消费级无人机的主流产品。作为国内领先的无人机生产商&#xff0c;大疆…

【腾讯云 HAI域探秘】StableDiffusionWebUI一小时搞定100张设计图

目录 前言一、选择 HAI部署的优势二、HAI 搭建AI绘图服务实现思路三、生成设计图操作流程1、新建HAI应用2、StableDiffusionWebUI&#xff08;1&#xff09;功能介绍&#xff08;2&#xff09;页面转中文&#xff08;3&#xff09;线稿生成图 四、部署StableDiffusionWebUI服务…

通讯网关软件033——利用CommGate X2OPC实现PI数据写入OPC Server

本文推荐利用CommGate X2OPC实现从PI服务器读取数据并写入OPC Server。CommGate X2OPC是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;实现从PI实时数据库获取数据并写入OPC Server。 【解决…

maven环境变量的配置

windows系统 1. win键 r&#xff0c;输入sysdm.cpl打开系统属性界面&#xff0c;选择高级栏目&#xff0c;点击环境变量菜单打开环境变量界面。 2. 选择系统变量下的新建菜单&#xff0c;变量名输入MAVEN_HOME&#xff0c;变量值输入maven的安装目录&#xff0c;例如&#xff…

CNN卷积神经网络模型的GPU显存占用分析

一、参考资料 浅谈深度学习:如何计算模型以及中间变量的显存占用大小 如何在Pytorch中精细化利用显存 二、相关介绍 0. 预备知识 为了方便计算&#xff0c;本文按照以下标准进行单位换算&#xff1a; 1 G 1000 MB1 M 1000 KB1 K 1000 Byte1 B 8 bit 1. 模型参数量的计…

基于构件的开发(CBD)

基于构件的开发&#xff08;Component-Based Development&#xff0c;简称CBD&#xff09;或基于构件的软件工程&#xff08;Component-Based Software Engineering&#xff0c;简称CBSE&#xff09;是一种软件开发新范型&#xff0c;它是在一定构件模型的支持下&#xff0c;复…

FPGA与ASIC有什么差异?二者该如何选用?

前言 对于一个数字电路的新手来说&#xff0c;这可能是会经常遇到的一个问题&#xff1a;FPGA和ASIC之间的区别是什么? 接下来本文将尝试讲解 “什么是FPGA&#xff1f;” 和 “什么是ASIC&#xff1f;”&#xff0c;然后讲述一些关于FPGA和ASIC的问题&#xff0c;例如它们之间…

【【FIFO to multiplier to RAM的 verilog 代码 和 testbnench 】】

FIFO to multiplier to RAM的 verilog 代码 和 testbnench 只完成了单个数据的传输 大数据需要修改 tb 或者基本连线 FIFO.v //synchronous fifo module FIFO_syn #(parameter WIDTH 16, // the fifo wideparameter DEPTH 1024, …

【MATLAB】全网唯一的7种信号分解+ARIMA联合的时序预测算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有7种信号分解ARIMA组合的时序预测算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算…

【三方登录-Apple】iOS 苹果授权登录(sign in with Apple)之开发者配置一

记录一下sign in with Apple的开发者配置 前言 关于使用 Apple 登录 使用“通过 Apple 登录”可让用户设置帐户并使用其Apple ID登录您的应用程序和关联网站。首先使用“使用 Apple 登录”功能启用应用程序的App ID 。 如果您是首次启用应用程序 ID 或为新应用程序启用应用程序…

加速计算卡设计方案:389-基于KU5P的双路100G光纤网络加速计算卡

基于KU5P的双路100G光纤网络加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm KU5P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x8智能加速计算卡&#xff0c;该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…

SpringBoot配置文件yml文件基础知识

yaml简介 YAML&#xff08;YAML Aint Markup Language&#xff09;&#xff0c;一种数据序列化格式 优点&#xff1a;容易阅读容易与脚本语言交互以数据为核心&#xff0c;重数据轻格式 YAML文件扩展名.yml&#xff08;主流&#xff09;.yamlyaml语法规则 大小写敏感 属性层级…

10.1 am62x平台怎么从ospi启动uboot

本文主要内容: 1 背景(硬件原理图与分区信息) 2 AM62x平台bootloader组成 3 设置SK-AM62B启动方式 4 烧录镜像到OSPI分区 5 解决Message not acknowledgedAuthentication failed!问题 1 背景 Ti的SK-AM62B评估板,通过OSPI接口,连接了一个Nor Flash:S28HS512TGABHM01…

聊天室系统源码 匿名聊天系统源码 在线聊天室系统源码 可发语音 图片 适用PC+WAP

PHP匿名在线聊天室系统源码&#xff0c;适用于PC和WAP端&#xff0c;支持语音和图片传输 通过修改数据库config\settings.php&#xff0c;可以将其用于搭建客户聊天专用的网站 要搭建一个专门用于与客户聊天的网站&#xff0c;您可以使用这个PHP匿名在线聊天室系统源码 该源码…

一文带你速通Sentinel限流规则(流控)解读

目录 前置知识速补 基本介绍 流控模式 直接模式 关联模式 链路模式 流控效果 直接失败 Warm Up&#xff08;预热&#xff09; 排队等待 前置知识速补 QPS每秒查询率(Query Per Second)&#xff1a;每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多…

基于阿基米德优化算法的无人机航迹规划-附代码

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