python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能
现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码。
首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/
咱们用Python中的urllib模块的功能进行爬取
众所周知,在爬虫的准备工作中我呢吧需要确定咱们爬取网站的url
那么,这个翻译网站的url如何确定呢?
我们进入网站,并单击F12打开开发者工具(这里我们用的谷歌浏览器)
这个网站的翻译功能分为两个部分:英译汉 汉译英
然后我决定先翻译两个单词玩玩!翻译的同事不关闭开发者工具,观察其变化。
事实证明这个网站的翻译能力还有待加强,毕竟每一个NBA球迷都知道laker是湖人的意思嘛!
在翻译的过程中我们发现他有一个地方在每一次翻译的时候都会增加一个:ajax.php?a=fy
打开这两个都可以在下面的Form Data中找到我们想要检索的单词
这个时候
我们发现这里的Request URL 是一个常量,每次的搜索时都不会改变,改变的部分仅限于底部的Form Data,所以我们可以确定这个搜索网站的base_url就是:
你小子啦!!
落实为代码就是
#确定URL
base_url="http://fy.iciba.com/ajax.php?a=fy"
data={
"f":"auto",
"t":"auto",
"w":word
}
data_str=parse.urlencode(data)
# url=base_url+data_str
得到了URL就可以进行下一步伪装和封装了。
这两部分在一起说是因为基本没有难点,只需要根据书写规范填就好了。
伪装部分:这里我们需要伪装成浏览器访问这个网页
我们需要的伪装信息可以在开发者工具中的这里找到。
#伪装
header={"User-Agent":" Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
封装部分用代码表示为:
#封装
response=request.Request(url=base_url,headers=header,data=bytes(data_str,encoding="utf-8"))
req=request.urlopen(response).read().decode("utf-8")
以上,我们初步将这个网页整个爬取下来了。现在我们需要在Python中将这个翻译的功能移植过来,这里我们定义了一个类——fanyi() 翻译类中我们定义一个函数——translate 来完成我们翻译功能的移植
在这个网站中他的翻译功能分为两部分:英译汉 汉译英
那么很明显这两个功能需要分开来实现,我们现在在网站中分别让他翻译英语和汉语,来观察他的变化:翻译的同时打印翻译所得的翻译数据。
通过翻译单词“red”和汉语“红色的”,我们发现:
#中译英
#{'status': 1, 'content': {'from': 'zh-CN', 'to': 'en-US', 'out': 'red', 'vendor': 'ciba', 'err_no': 0}}
#英译中
#{'status': 0, 'content': {'ph_en': 'red', 'ph_am': 'rɛd', 'ph_en_mp3': 'http://res.iciba.com/resource/amp3/oxford/0/3b/57/3b577c8f5bfa2cc523fac83910773295.mp3', 'ph_am_mp3': 'http://res.iciba.com/resource/amp3/1/0/bd/a9/bda9643ac6601722a28f238714274da4.mp3', 'ph_tts_mp3': 'http://res-tts.iciba.com/b/d/a/bda9643ac6601722a28f238714274da4.mp3', 'word_mean': ['adj. 红色的;(脸)涨红的;烧红的;红头发的;', 'n. 红色;红衣服;红颜料;红葡萄酒;']}}
我们发现状态码’status’,在中译英时状态码为1,英译中时为0,
根据这个规律,我们可以进行判断了。代码如下
trans_word = translate(word)
current_state=trans_word["status"]
#在这里判断中译英
if current_state==1:
current_content=trans_word["content"]
print(current_content["out"])
#否则则汉译英
else:
current_content0=trans_word["content"]
print(current_content0["word_mean"])
以上就是全部的逻辑思路,将思路与代码封装为一个类——fanyi中,代码如下:
from urllib import request,parse
import json
class fanyi():
def translate(word):
#确定URL
base_url="http://fy.iciba.com/ajax.php?a=fy"
data={
"f":"auto",
"t":"auto",
"w":word
}
data_str=parse.urlencode(data)
# url=base_url+data_str
#伪装
header={"User-Agent":" Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}
#封装
response=request.Request(url=base_url,headers=header,data=bytes(data_str,encoding="utf-8"))
req=request.urlopen(response).read().decode("utf-8")
obj=json.loads(req)
return obj
if __name__ == '__main__':
word = input("请输入需要翻译的词句:")
#print(trans_word)
#中译英
#{'status': 1, 'content': {'from': 'zh-CN', 'to': 'en-US', 'out': 'red', 'vendor': 'ciba', 'err_no': 0}}
#英译中
#{'status': 0, 'content': {'ph_en': 'red', 'ph_am': 'rɛd', 'ph_en_mp3': 'http://res.iciba.com/resource/amp3/oxford/0/3b/57/3b577c8f5bfa2cc523fac83910773295.mp3', 'ph_am_mp3': 'http://res.iciba.com/resource/amp3/1/0/bd/a9/bda9643ac6601722a28f238714274da4.mp3', 'ph_tts_mp3': 'http://res-tts.iciba.com/b/d/a/bda9643ac6601722a28f238714274da4.mp3', 'word_mean': ['adj. 红色的;(脸)涨红的;烧红的;红头发的;', 'n. 红色;红衣服;红颜料;红葡萄酒;']}}
trans_word = translate(word)
current_state=trans_word["status"]
#在这里判断中译英
if current_state==1:
current_content=trans_word["content"]
print(current_content["out"])
#否则则汉译英
else:
current_content0=trans_word["content"]
print(current_content0["word_mean"])
fanyi()
运行后的效果如下:
运用爬虫的技术将翻译功能就这么从网站移植到了我们的Pycharm上了,是不是很简单?
以上
python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能相关推荐
- python爬取电脑本地数据_利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息...
原标题:利用python爬取丁香医生上新型肺炎数据,并下载到本地,附带经纬度信息 新型肺炎肆虐全国,可以预知,最近一两年地理学中会有一部分论文研究新型肺炎的空间分布及与其他指标的关联分析.获取其患病人 ...
- python 替换array中的值_利用Python提取视频中的字幕(文字识别)
我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...
- python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用
注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...
- python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件
利用Python如何批量修改数据库执行Sql文件 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...
- python把汉字变成拼音英文_利用python将表格中的汉字转化为拼音
GB18030的字符集标准 http://zbgb5.com/2/StandardDetail479488.htm 缺少包时用pip install 进行安装,例如: pip install xlsx ...
- python人物关系可视化百年孤独_利用python对《乘风破浪的姐姐》可视化
要说今年最火的综艺节目,兴风作浪--,哦,不对:小明历险记--,也不对,哎!算了,接着看吧-- 一.数据 利用爬虫抓取了百度百科和维基百科上姐姐们的公开数据信息.两个网站均为静态的页面,只需要对相应H ...
- python绘制简单城市剪影图_利用Python的folium包绘制城市道路图的实现示例
写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...
- python 求组合数最快方法_利用Python进行组合数计算
如何利用Python来实现数学组合计算?一起来看看吧~ 前言 开学几个星期了emmm 作业一如既往的多....... 在做数学的时候经常要算组合数,奈何我的计算机太水了(其实是我懒哈哈) 正好最近学P ...
- python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表
在<利用Python打开DICOM CT文件>一文中,我们利用pydicom.dcmread()读取了CT图像.本文中我们将修改load_scan()函数来读取RTstructure文件并 ...
最新文章
- centos下安装python2.7.1 以及装完后 yum 不能用的问题
- arcgis判断两个字段是否相等
- C++学习—— mutable和 extern
- vm虚拟机系统界面无法全屏
- [C++] 栈 和 队列
- STM32——项目需求之低功耗的停机模式
- Zen Cart 如何添加地址栏上的小图标
- 利用 HttpModule,基于输出,统一控制、干预、处理(例如: 过滤关键字、AntiXSS) ASP.Net WebForm Control 展现属性的方案原型...
- vscode快速删除空白行方法
- 三阶魔方还原步骤图_魔方小站三阶魔方盲拧视频教程 (蒙眼拧魔方教程|还原公式图解|3D动画)...
- word2020 复制的文字有背景颜色怎么去掉呢
- C语言————有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,下面的程序统计卖完西瓜所需的天数
- 农夫山泉病毒性营销方案策划
- 组合数学-排列组合整理
- 怎么用计算机标准表示方法,算法及其表示方法
- 微信小程序嵌套iframe_H5嵌入微信小程序踩过的坑
- 最强悍的围棋人机对战程序 MoGo !
- 影响计算机网络性能的原因,计算机网络传输效率分析论文
- python画蜡烛图_Python量化交易-绘制蜡烛图 !这个图不像你的钱哦!
- pyhton获取 中国各个省份/直辖市拥有的上市公司数目