当前位置: 首页 > news >正文

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.lryc.cn/news/109054.html

相关文章:

  • uni-app、H5实现瀑布流效果封装,列可以自定义
  • vue echart3个饼图
  • LEARNING TO EXPLORE USING ACTIVE NEURAL SLAM 论文阅读
  • item_search-ks-根据关键词取商品列表
  • windows运行WPscan报错:无法打开库libcurl.dll
  • web前端框架Javascript之JavaScript 异步编程史
  • Java多线程(1)---多线程认识、四种创建方式以及线程状态
  • 搭建Django+pyhon+vue自动化测试平台
  • CASAIM自动化平面度检测设备3D扫描零部件形位公差尺寸测量
  • PostgreSql pg_ctl 命令
  • MySQL中的MVCC具体指的是什么?
  • Docker网络模型详解
  • 如何打造属于自己的个人IP?
  • 全网最全最细的jmeter接口测试教程以及接口测试流程详解
  • 【Linux命令200例】whereis用于搜索以及定位二进制文件
  • Elasticsearch:如何将整个 Elasticsearch 索引导出到文件 - Python 8.x
  • cmd 实现启动mysql时保留窗口
  • JavaScript数据结构与算法——栈
  • Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词
  • SpringMVC组件
  • 解决el-dialog弹出时,页面抖动,右侧会缩小的问题(即滚动条被遮罩层覆盖的问题)
  • 【Rust 基础篇】Rust 属性宏:定制你的代码
  • 2023-08-04力扣今日三题
  • 从HTTP代理到Socks5代理:网络安全与爬虫的进化之路
  • 数学建模-元胞自动机
  • 化学合成有机化学 | 逆合成分析软件/数据库汇总
  • 无涯教程-jQuery - Selectable选择函数
  • MySQL修改root密码
  • vue获取近七天、月份、年份的起始日和结束日
  • android AIDL 学习使用