DeepSeek教我写词典爬虫获取单词的音标和拼写

news2025/3/10 6:10:52

Python在爬虫领域展现出了卓越的功能性,不仅能够高效地抓取目标数据,还能便捷地将数据存储至本地。在众多Python爬虫应用中,词典数据的爬取尤为常见。接下来,我们将以dict.cn为例,详细演示如何编写一个用于爬取词典数据的爬虫程序。

一、正则re法

在开始编写爬虫之前,我们需要利用Python的正则表达式模块来提取单词的音标和常见释义。编写正则表达式往往是这一过程中最具挑战性的部分。此时,我们可以借助DeepSeek等工具来简化正则表达式的编写,从而将更多精力集中在获取网页源码等基础任务上。

首先,我们访问dict.cn网站,并在搜索框中输入单词“people”,随后会跳转到如下页面:

然后,我们鼠标右击页面的空白处,在右键菜单中选择查看页面源代码,就得到下面的html代码:

接下来,我们从网页头部复制到我们要获取内容的部分,注意不要复制全部,那样有可能会得到不完整的回复。复制粘贴到纳米搜索中,在DeepSeek的问答页面,给出以下提示词:有一个网页代码如下,我们想re正则获取单词people的拼写、音标,以及所有的基础意思,如何写代码?

DeepSeek很快给我返回了一个Python的样例代码:

import re 
 
# 示例网页代码 
html_code = '<span class="spell">people</span><span class="phonetic">/ˈpiːpl/</span><span class="meaning">人;人们;民族</span>' 
 
# 定义正则表达式模式 
spell_pattern = r'<span class="spell">(.*?)</span>' 
phonetic_pattern = r'<span class="phonetic">(.*?)</span>' 
meaning_pattern = r'<span class="meaning">(.*?)</span>' 
 
# 使用 re 模块进行匹配 
spell_match = re.search(spell_pattern,  html_code) 
phonetic_match = re.search(phonetic_pattern,  html_code) 
meaning_match = re.search(meaning_pattern,  html_code) 
 
# 提取匹配结果 
if spell_match and phonetic_match and meaning_match: 
    spell = spell_match.group(1)  
    phonetic = phonetic_match.group(1)  
    meaning = meaning_match.group(1)  
 
    print(f"拼写: {spell}") 
    print(f"音标: {phonetic}") 
    print(f"基础意思: {meaning}") 
else: 
    print("未找到匹配信息。") 

从上面的代码中,我们学到了在获取网页源代码后,如何利用re匹配得到我们想要的内容,经测试上面样例代码正确。下面,结合我们原有的基础爬虫知识,利用requests获取网页源码的功能,写出了如下代码:

import requests
import re
def translate(word):
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"}
    url = r"https://dict.cn/search?q=" + word
    resp = requests.get(url, headers=headers, timeout=30).text
    recode = resp.encode('utf-8')
    phonetic = re.search('<bdo lang="EN-US">(.*?)</bdo>',resp)
    pattern = re.compile(r'<ul class="dict-basic-ul">(.*?)</ul>', re.DOTALL)
    matches = pattern.findall(resp) 
    mean = []
    # 解析提取的内容 
    if matches:
        content = matches[0]
        # 提取所有<li>标签中的内容 
        meanings = re.findall(r'<li>.*?<span>(.*?)</span>.*?<strong>(.*?)</strong>.*?</li>', content, re.DOTALL) 
        for part_of_speech, meaning in meanings:
            mean.append(f"{part_of_speech}{meaning}")
    return word,phonetic.group(1),"".join(mean)
print(*translate("people"))

二、利用BeautifulSoup来获取

以上是正则匹配获取,我们也可以用BeautifulSoup这个模块来获取网页内容。于时,继续向DeepSeek提问。

然后,我们得到了样例代码如下:

from bs4 import BeautifulSoup 
 
html = '''(此处插入网页源码)'''
 
soup = BeautifulSoup(html, 'html.parser') 
result = {}
 
# 获取基础释义 
basic_ul = soup.find('ul',  class_='dict-basic-ul')
if basic_ul:
    for li in basic_ul.find_all('li'): 
        # 跳过广告位 
        if li.find('script'):  
            continue 
            
        pos_tag = li.find('span') 
        def_tag = li.find('strong') 
        if pos_tag and def_tag:
            pos = pos_tag.text.strip('.').upper()   # 转换为名词/动词标准格式 
            definitions = [d.strip() for d in def_tag.text.split(' ;')]
            result.setdefault(pos,  []).extend(definitions)
 
print(result)

结合我们的原有的爬虫基础,经过修改得到下面的代码:

from bs4 import BeautifulSoup 
import requests
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36"}
url = r"https://dict.cn/search?q=" + "people"
resp = requests.get(url, headers=headers, timeout=30).text
recode = resp.encode('utf-8')
html = resp
soup = BeautifulSoup(html, 'html.parser') 
 
# 获取基础释义 
basic_ul = soup.find('ul',  class_='dict-basic-ul')
if basic_ul:
    for li in basic_ul.find_all('li'): 
        # 跳过广告位 
        if li.find('script'):  
            continue 
            
        pos_tag = li.find('span') 
        def_tag = li.find('strong') 
        if pos_tag and def_tag:
            pos = pos_tag.text  # 转换为名词/动词标准格式 
            definitions = [d.strip() for d in def_tag.text.split(' ;')]
            print(pos,definitions)

结果展示:

在代码中,我们根据调试需要,又进行了一定的修改,添加requests,headers,便于获取网页源码,同时精减部分代码。最终,我们利用DeepSeek完成了爬虫的撰写并迅速调试成功。

三、学后总结

1. DeepSeek还不能完全替代我们来写Python爬虫,但可以起到辅助作用,我们可以借助它更好更快地写出正确的爬虫代码。

2. 有了人工智能并不意味着基础的编程知识不重要了,相反基础知识更加重要了。人工智能大模型可以辅助我们生成代码,而我们则可以对代码进行调试,选取合适的代码,并对于冗余的代码进行综合判断,最终删除不必要的代码,使我们的代码更精减和健壮。

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

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

相关文章

祛魅 Manus ,从 0 到 1 开源实现

背景介绍 Manus 是最近一个现象级的大模型 Agent 工具&#xff0c;自从发布以来&#xff0c;被传出各种神乎其神的故事&#xff0c;自媒体又开始炒作人类大量失业的鬼故事&#xff0c;Manus 体验码也被炒作为 10w 的高价。 之后又出现反转&#xff0c;被爆出实际体验效果不佳…

C++入门——输入输出、缺省参数

C入门——输入输出、缺省参数 一、C标准库——命名空间 std C标准库std是一个命名空间&#xff0c;全称为"standard"&#xff0c;其中包括标准模板库&#xff08;STL&#xff09;&#xff0c;输入输出系统&#xff0c;文件系统库&#xff0c;智能指针与内存管理&am…

Spring Boot应用开发:从零到生产级实战指南

Spring Boot应用开发&#xff1a;从零到生产级实战指南 Spring Boot应用开发&#xff1a;从零到生产级实战指南一、Spring Boot的核心价值二、快速构建第一个Spring Boot应用2.1 使用Spring Initializr初始化项目2.2 项目结构解析2.3 编写第一个REST接口 三、Spring Boot的核心…

【2025前端高频面试题——系列一之MVC和MVVM】

前端高频面试题——系列一之MVC和MVVM 前言一、MVC的基本逻辑二、MVVM的基本逻辑总结 提示&#xff1a;片尾总结了要点&#xff0c;硬背的话直接跳到最后 前言 相信持续关注我文章的小伙伴知道我之前就MVC和MVVM做过较为详细的讲解&#xff0c;但是我发现&#xff0c;他依旧是…

基于遗传算法的IEEE33节点配电网重构程序

一、配电网重构原理 配电网重构&#xff08;Distribution Network Reconfiguration, DNR&#xff09;是一项优化操作&#xff0c;旨在通过改变配电网中的开关状态&#xff0c;优化电力系统的运行状态&#xff0c;以达到降低网损、均衡负载、改善电压质量等目标。配电网重构的核…

容器编排革命:从 Docker Run 到 Docker Compose 的进化之路20250309

容器编排革命&#xff1a;从 Docker Run 到 Docker Compose 的进化之路 一、容器化部署的范式转变 在 Docker 生态系统的演进中&#xff0c;容器编排正从“手动操作”走向“自动化管理”。根据 Docker 官方 2023 年开发者调查报告&#xff0c;78% 的开发者已采用 Docker Compo…

【高并发内存池】释放内存 + 申请和释放总结

高并发内存池 1. 释放内存1.1 thread cache1.2 central cache1.3 page cache 2. 申请和释放剩余补充 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x…

自然语言处理:最大期望值算法

介绍 大家好&#xff0c;博主又来给大家分享知识了&#xff0c;今天给大家分享的内容是自然语言处理中的最大期望值算法。那么什么是最大期望值算法呢&#xff1f; 最大期望值算法&#xff0c;英文简称为EM算法&#xff0c;它的核心思想非常巧妙。它把求解模型参数的过程分成…

Python绘制数据分析中经典的图形--列线图

Python绘制数据分析中经典的图形–列线图 列线图是数据分析中的经典图形&#xff0c;通过背后精妙的算法设计&#xff0c;展示线性模型&#xff08;logistic regression 和Cox&#xff09;中各个变量对于预测结果的总体贡献&#xff08;线段长短&#xff09;&#xff0c;另外&…

11. 盛最多水的容器(力扣)

11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不…

vue3 vite或者vue2 百度地图(卫星图)离线使用详细讲解

1、在Windows上下载瓦片&#xff0c;使用的工具为: 全能电子地图下载器3.0最新版&#xff08;推荐&#xff09; 下载后解压&#xff0c;然后进入目录"全能电子地图下载器3.0最新版&#xff08;推荐&#xff09;\全能电子地图下载器3.0\MapTileDownloader" 在这个目录…

大语言模型从理论到实践(第二版)-学习笔记(绪论)

大语言模型的基本概念 1.理解语言是人工智能算法获取知识的前提 2.语言模型的目标就是对自然语言的概率分布建模 3.词汇表 V 上的语言模型&#xff0c;由函数 P(w1w2 wm) 表示&#xff0c;可以形式化地构建为词序列 w1w2 wm 的概率分布&#xff0c;表示词序列 w1w2 wm…

Unity 通用UI界面逻辑总结

概述 在游戏开发中&#xff0c;常常会遇到一些通用的界面逻辑&#xff0c;它不论在什么类型的游戏中都会出现。为了避免重复造轮子&#xff0c;本文总结并提供了一些常用UI界面的实现逻辑。希望可以帮助大家快速开发通用界面模块&#xff0c;也可以在次基础上进行扩展修改&…

Navigation的进阶知识与拦截器配置

Navigation的进阶知识与拦截器配置 写的不是很详细&#xff0c;后续有时间会补充&#xff0c;建议参考官方文档食用 1.如何配置路由信息 1.1 创建工程结构 src/main/ets ├── pages │ └── navigation │ ├── views │ │ ├── Mine.ets //…

Java数据结构第二十一期:解构排序算法的艺术与科学(三)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、常见排序算法的实现 1.1. 归并排序 二、排序算法复杂度及稳定性分析 一、常见排序算法的实现 1.1. 归并排序 归并排序是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法的一个⾮常典型的…

go切片定义和初始化

1.简介 切片是数组的一个引用&#xff0c;因此切片是引用类型&#xff0c;在进行传递时&#xff0c;遵守引用传递的机制。切片的使用和数组类似&#xff0c;遍历切片、访问切片的元素和切片的长度都一样。。切片的长度是可以变化的&#xff0c;因此切片是一个可以动态变化的数…

【NLP 39、激活函数 ⑤ Swish激活函数】

我的孤独原本是座荒岛&#xff0c;直到你称成潮汐&#xff0c;原来爱是让个体失序的永恒运动 ——25.2.25 Swish激活函数是一种近年来在深度学习中广泛应用的激活函数&#xff0c;由Google Brain团队在2017年提出。其核心设计结合了Sigmoid门控机制和线性输入的乘积&#xff0c…

南开提出1Prompt1Story,无需训练,可通过单个连接提示实现一致的文本到图像生成。

&#xff08;1Prompt1Story&#xff09;是一种无训练的文本到图像生成方法&#xff0c;通过整合多个提示为一个长句子&#xff0c;并结合奇异值重加权&#xff08;SVR&#xff09;和身份保持交叉注意力&#xff08;IPCA&#xff09;技术&#xff0c;解决了生成图像中身份不一致…

STM32驱动OLED屏幕全解析:从原理到温度显示实战(上) | 零基础入门STM32第五十三步

主题内容教学目的/扩展视频OLED显示屏重点课程电路原理&#xff0c;手册分析&#xff0c;驱动程序。初始化&#xff0c;清屏&#xff0c;ASCII字库&#xff0c;显示分区。调用显示函数。做带有加入图形和汉字显示的RTC时钟界面。讲字库的设计原理。 师从洋桃电子&#xff0c;杜…

MySQL语法总结

本篇博客说明&#xff1a; &#xff01;&#xff01;&#xff01;.注意此系列都用的是MySQL语句&#xff0c;和SQLServer&#xff0c;PostgreSQL有些细节上的差别&#xff01;&#xff01;&#xff01; 1.每个操作都是先展示出语法格式 2.然后是具体例子 3.本篇注脚与文本顺讯息…