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.hqwc.cn/news/60982.html

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

相关文章

汉字形近字(OCR)

近期做中文OCR识别的优化,抓破头皮却收获甚微。 为了百尺竿头更进一步,遂将目光聚焦在中文汉字特有的形近字和生僻字问题上,于是怒发整理形近字大全(花了不少刀),希望对同行朋友们也有帮助: 地表…

【LeetCode 75】第二十三题(2352)相等行列对

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 题目很简洁,就是要我们寻找行与列相同的对数。相同行与列不仅是要元素相同,还需要顺序也一样&#xff08…

AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤

1.选择一个实例,进入后端界面 2. 更新bashrc中的环境变量 conda init bash && source /root/.bashrc查看虚拟环境 conda info --envs可以看到此时有一个base的虚拟环境 但是它的python版本为3.8.10,无法安装tensorflow1.15,所以我们要创建一个…

【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析

**本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go语言入门指南:基础语法和常用特性解析 | 青训营 本文主要梳理自第六届字节跳动青训营&#xff…

chapter14:springboot与安全

Spring Boot与安全视频 Spring Security, shiro等安全框架。主要功能是”认证“和”授权“,或者说是访问控制。 认证(Authentication)是建立在一个声明主体的过程(一个主体一般指用户,设备或一些可以在你的应用程序中…

【数据结构OJ题】合并两个有序数组

原题链接:https://leetcode.cn/problems/merge-sorted-array/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 看到这道题,我们注意到nums1[ ]和nums2[ ]两个数组都是非递减的。所以我们很容易想到额外开一个数组tmp[ ]&#x…

Leetcode.1289 下降路径最小和 II

题目链接 Leetcode.1289 下降路径最小和 II rating : 1697 题目描述 给你一个 n x n 整数矩阵 g r i d grid grid ,请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为:从 g r i d grid grid 数组中的每一行选择一个数字&#xff…

【密码学】六、公钥密码

公钥密码 1、概述1.1设计要求1.2单向函数和单向陷门函数 2、RSA公钥密码体制2.1加解密2.2安全性分析 3、ElGamal公钥密码体制3.1加解密算法3.2安全性分析 4、椭圆曲线4.1椭圆曲线上的运算4.2ECC 5、SM2公钥密码体制5.1参数选取5.2密钥派生函数5.3加解密过程5.3.1初始化5.3.2加密…

pytest fixture 常用参数

fixture 常用的参数 参数一:autouse,作用:自动运行,无需调用 举例一:我们在类中定义一个function 范围的fixture; 设置它自动执行autouseTrue,那么我们看下它执行结果 输出: 说明:…

WebRTC | 音视频直播客户端框架

端到端通信互动技术可分解为以下几个技术难点:客户端技术、服务器技术、全球设备网络适配技术和通信互动质量监控与展示技术。 一、音视频直播 音视频直播可分成两条技术路线:一条是以音视频会议为代表的实时互动直播;另一条是以娱乐直播为代…

【TypeScript】类型断言-类型的声明和转换(五)

【TypeScript】类型断言-类型的声明和转换(五) 【TypeScript】类型断言-类型的声明和转换(五)一、简介二、断言形式2.1 尖括号语法2.2 as形式 三、断言类型3.1 非空断言3.2 肯定断言-肯定化保证赋值3.3 将任何类型断言为any3.4 调…

multi-head_seft-attention(多头自注意力)

对比 相比于single-head,multi-head就是将 q i q^i qi分成了 h h h份 multi-head_seft-attention的计算过程 将 q i q^i qi分成了 h h h份 计算过程 对于每个Head,我们可以提取出他的 b 11 b_{11} b11​到 b m 1 b_{m1} bm1​,以 H e…