Python批量查字典和爬取双语例句

最近,有网友反映,我的批量查字典工具换到其它的网站就不好用了。对此,我想说的是,互联网包罗万象,网站的各种设置也有所不同,并不是所有的在线字典都可以用Python爬取的。事实上,很多网站为了防止被爬取内容,早就提高了网站的安全级别,不会让用户轻意爬取内容的。

由于这名网友想要的是韩语翻译,所以我就不能拿原来的网站来操作了,只好去网上查询网速快、又不对爬虫有限制的网站来操作。终于,探索出了爬取某字典网站上内容的方法。

一、用BeautifulSoup获取翻译

这是一个字典网站,也是一个双语句库网站,对于汉语的韩语翻译,我们可以通过requests来获取网页源文,再用BeautifulSoup进行解析,然后用soup.find()查找想要的标签信息和Class,提取文本信息,然后再写入到xls文件就可以了,代码如下:

import xlwt
import requests
from bs4 import BeautifulSoupheaders = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.37"}def get_word(word):url=f"https://zh.glosbe.com/zh/ko/{word}"resp = requests.get(url,headers=headers)soup = BeautifulSoup(resp.text, 'html.parser')# 查找查询结果result = soup.find('div', class_="inline leading-10")if result:return result.text.split()[0]else:return "未找到翻译"def process_txt_file(filename):# 创建工作簿wb = xlwt.Workbook()# 创建表单sh = wb.add_sheet("sheet 1")with open(filename, 'r', encoding='utf-8') as file:words = [i.strip() for i in file.readlines()]for index,word in enumerate(words):sh.write(index,0,word)sh.write(index,1,get_word(word))wb.save('translation_results.xls')
#调用函数并传入txt文件路径
process_txt_file('words.txt')

二、用openpyxl来写入xlsx文件

上面的代码中采用的是xlwt来写入到xls文件,我们也可以改用openpyxl,同时,我们还可以通过soup.h3.string来更快地定位所需要的位置信息。这次我们把查询的内容由韩语改为英文,代码优化如下:

import requests
from bs4 import BeautifulSoup
import openpyxl
headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.37"}
def get_word(word):url=f"https://zh.glosbe.com/zh/en/{word}"resp = requests.get(url,headers=headers)soup = BeautifulSoup(resp.text, 'html.parser')# 查找查询结果#results = soup.find_all('div', class_="py-2 flex")results = soup.h3.stringif results:return results.strip()else:return "未找到翻译"
#     if results:
#         for result in results:
#             print(result.replace("\n\n\n","\n").strip()) 
#     else:
#         return "未找到翻译"
def process_txt_file(filename):workbook = openpyxl.Workbook()sheet = workbook.activewith open(filename, 'r', encoding='utf-8') as file:words = [i.strip() for i in file.readlines()]for index, word in enumerate(words):translation = get_word(word)sheet.cell(row=index + 1, column=1).value = wordsheet.cell(row=index + 1, column=2).value = translationworkbook.save('translation_results.xlsx')#调用函数并传入txt文件路径
process_txt_file('words.txt')

三、提取双语例句到xlsx文件

先上效果,以下是多个关键词及其相关例句的图示:

相关代码如下:

import requests
from bs4 import BeautifulSoup
import openpyxl
headers = {"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36 Edg/114.0.1823.37"}
def get_word(word):url=f"https://zh.glosbe.com/zh/en/{word}"resp = requests.get(url,headers=headers)soup = BeautifulSoup(resp.text, 'html.parser')# 查找查询结果results = soup.find_all('div', class_="py-2 flex")lst=[]if results:for result in results:text = result.text.replace("\n\n\n","\n").strip()lst.append(text.split("\n"))return lstelse:return "未找到翻译"def process_txt_file(filename):workbook = openpyxl.Workbook()sheet = workbook.activewith open(filename, 'r', encoding='utf-8') as file:words = [i.strip() for i in file.readlines()]for word in words:sheet.append([word])paras = get_word(word)for para in paras:sheet.append(para)workbook.save('translation.xlsx')#调用函数并传入txt文件路径
process_txt_file("words.txt")

四、学后的反思

1. 爬虫不是万能的,不能完全依靠爬虫去获取一切网上的信息,毕竟有很多网站的案例防御机制是针对爬虫的

2. 利用BeautifulSoup是很不错的解析、提取网页标签的方法,如果无法完全获取网页信息就要考虑带上headers,cookies等信息。

3. 写入excel文件有多种 方法,列表写入Excel可以考虑sheet.append()方法,简单实用。

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

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

相关文章

Linux文本三剑客---grep、sed、awk

目录标题 1、grep1.1 命令格式1.2命令功能1.3命令参数1.4grep实战演练 2、sed2.1 认识sed2.2命令格式2.3常用选项options2.4地址定界2.5 编辑命令command2.6用法演示2.6.1常用选项options演示2.6.2地址界定演示2.6.3编辑命令command演示 3、awk3.1认识awk3.2常用命令选项3.3awk…

向表中随机插入字符串数据

已知表 向该表中插入指定次数的随机字符串: 代码如下: DROP PROCEDURE sc //CREATE PROCEDURE sc(num INT) BEGIN DECLARE str VARCHAR(26) DEFAULT "abcdefghijklmnopqrstuvwxyz"; DECLARE cnt INT DEFAULT 0; DECLARE startIndex INT DEFAULT 1; DE…

msvcp120.dll丢失的解决方法(亲测可修复方的法)

在运行某些软件的时候,计算机提示msvcp120.dll丢失,无法打开运行软件。在第一次遇到这个问题的时候,相信很多人都不知道是怎么回事。下面小编把msvcp120.dll是什么以及如何解决这个问题的详细方法给大家科普一下。 问题描述: 在使…

Ubuntu安装MySQL 8.0与Navicat

目录 Ubuntu安装MySQL 8.0 1、更新软件包列表 2、安装 MySQL 8.0 3、启动 MySQL 服务 5、确保MySQL服务器正在运行 5、root 用户的密码 6、登录MySQL,输入mysql密码 7、MySQL默认位置 Ubuntu安装Navicat 1、下载 Navicat 2、额外的软件包 3、执行命令 U…

周末在家值班,解决几个月前遗忘的Bug

问题: 周末被迫在家值班,无聊之际打开尘封已久的Bug清单,发现有Bug拖了几个月还没解决… 场景是这样子的,有个功能是拿Redis缓存热点数据进行展示,暂且称它为功能A,有个另外的功能B,它会去更新缓…

lifecycleScope Unresolved reference

描述 导入了lifecycle.lifecycleScope,但是在activity中使用lifecycleScope报错出现Unresolved reference找不到引用。 导包 import androidx.lifecycle.lifecycleScope使用 lifecycleScope.launch(Dispatchers.IO) {...}错误 方案 代码中的activity继承Activ…

【基于HBase和ElasticSearch构建大数据实时检索项目】

基于HBase和ElasticSearch构建大数据实时检索项目 一、项目说明二、环境搭建三、编写程序四、测试流程 一、项目说明 利用HBase存储海量数据,解决海量数据存储和实时更新查询的问题;利用ElasticSearch作为HBase索引,加快大数据集中实时查询数…

年薪930万,谷歌薪资大揭秘

硅谷大厂中,谷歌员工称得上是科技行业中收入最高的一些人。 据统计,谷歌工程师在2022年总薪酬中位数为279,802美元(约200万人民币),但这仅是基本工资。 如果计入股权和奖金,他们的收入甚至更高。 近来&am…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点,根据不同的服务创建不同的索引,根据日期和环境,平均每天递增60*2,大约60Gb的数据。 调优技巧 原文参考:干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

Spring源码分析

一、基本注解 1.注解总览 2.重点注解描述 ① Bean、Import 初学时,一般使用xml配置文件将Bean注册到Spring容器当中,在实际开发中,使用注解将Bean注册到Spring容器当中也是很常见的。 使用xml方式将bean注册到spring容器当中 获取bean信息…

【C语言进阶】数据的存储----浮点型篇

🍁 博客主页:江池俊的博客 💫收录专栏:C语言—探索高效编程的基石 💻 其他专栏:数据结构探索 ​💡代码仓库:江池俊的代码仓库 🎪 社区:GeekHub 🍁 如果觉得博…

在线课堂,视频点播,springboo+vue

springbootvue三端(管理后台,教师端,用户端)端可提供源码,可远程安装,需要的加微信: 体验地址:http://edu.dgrxs.com/ 用户端: 管理端: 教师端:

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代,我们每个人时刻都在生成、传递和应用数据,数据已经成为了现代社会中宝贵的资源之一,而在人工智能领域,数据更是被称为人工智能的“燃料”。 而在AI的发展中,只有拥有高质量、多样性且充分代表性的数据集…

【javaSE】 万字带你了解String类

目录 String类的重要性常用方法字符串构造使用常量串构造直接newString对象使用字符数组进行构造 String对象的比较比较是否引用同一个对象boolean equals(Object anObject) 方法int compareTo(String s) 方法int compareToIgnoreCase(String str) 方法 字符串查找char charAt(…

【雕爷学编程】MicroPython动手做(31)——物联网之Easy IoT 2

1、物联网的诞生 美国计算机巨头微软(Microsoft)创办人、世界首富比尔盖茨,在1995年出版的《未来之路》一书中,提及“物物互联”。1998年麻省理工学院提出,当时被称作EPC系统的物联网构想。2005年11月,国际电信联盟发布《ITU互联网…

蓝桥杯上岸必刷!!! (进制、数位专题)

蓝桥杯上岸必刷!!!(进制、数位专题) 距离蓝桥杯省赛倒数最后1天 ❗️ ❗️ ❗️ 还没背熟模板的伙伴们背起来 💪 💪 💪 大家好 我是寸铁💪 真题千千万万遍,蓝桥省一自然现&#…

ChatGPT今日宣布推出6大新功能,体验效果更佳

今天“一起学英语”群的KV大神发了一张截图,原来OpenAI官方账号发布了一条推文(或者称之为X文?),广而告之:下周要上功能了。 这次更新的功能共计6条,看来OpenAI已准备腹泻式更新,即版…

2023年C++面试宝典

目录 第一章:C基础知识1.1 C语言起源与发展1.2 C的重要特点和优点1.3 C的数据类型和变量1.4 函数和命名空间1.5 运算符和表达式 第二章:面向对象编程2.1 类与对象的概念2.2 封装、继承和多态2.3 构造函数和析构函数2.4 静态成员和常量成员2.5 虚函数和纯…

【电源专题】充电IC与DC-DC有什么区别

充电IC和DC-DC一样使用很广泛,如手机、平板等需要电池供电的系统中,一般都会见到充电IC的身影。那么大家有没有考虑过一个问题。充电IC与DC-DC有什么区别? 首先如下所示为充电IC的两个阶段,一个阶段是恒流充电阶段,我们一般称之为CC阶段,另一个是恒压充电阶段,我们称之为…

debug思路 - maven构建报错

问题:maven面板中,进行compile、deploy操作时报错。 debug步骤: 1、鼠标右键选择“修改运行配置”。在运行命令中添加参数-X,用于产生执行调试输出。例如:compile -f -X pom.xml。 2、再次进行compile、deploy操作&…