接着上次的python内容,我们继续进行python应用上手
实际python做项目的时候我们都或多或少的要接触一些文档,而很坑的是,这些技术文档多半还是用英文写的,其实因为近年来卷积神经网络等机器学习技术的发展,计算机语言翻译功能已经非常发达,我们可以更多的尝试用软件来翻译文档,
这里我们做一个简单的爬虫,把我们的文档自动送给“百度翻译”,然后让爬虫再自动把翻译结果下载下来~。
知己知彼,百战不殆,我们先去“百度翻译”的官网踩踩点:
网址是“http://fanyi.baidu.com/?aldtype=16047#auto/zh”
在制作爬虫之前,我们必须要先知道我们提交表单时它的通讯格式:
在网页上右键 审查元素,点击Network,在name中点击v2transapi
如下图:
看到如下画面,
这个就是它的通讯格式,
由此我们可以开始写代码了:
先安装我们必要的插件 urllib:
这里我已Python2.7为例:
使用python的pip进行安装 操作如下:
打开命令提示符:
输入 pip install urllib
看到如下画面,
然后我们再安装另一个模块插件 docx ,方法同上;
安装成功以后。
我们开始码代码:
# -*- coding:UTF-8 -*-
import urllib
import json
import requests
from docx.api import Document
from docx.shared import Pt
import docx
import time
content=0
# doc_new = docx.Document(ur'翻译结果.docx')
doc_new = Document()
def writeDocx(p):
#从样式库中选取 'Normal' 样式,并提取 'Normal' 样式的字符属性
style = doc_new.styles['Normal']
font = style.font
#设置样式中的字符属性 ,操作方法和上面改变内联对象属性方法一致
font.name = "Microsoft YaHei UI"
font.size = Pt(8)
#将设置好字符属性的样式运用到段落中
p = doc_new.add_paragraph(p, style = 'Normal')
# doc_new.add_paragraph(p.text,style='Heading 2')
doc_new.save(ur'翻译结果.docx')
def transDocx(docName):
fullText = []
doc = docx.Document(docName)
paras = doc.paragraphs
i=0
for p in paras:
i=i+1
# print ("第"+str(i)+"段")
content=p.text
if content=='':
continue
# print "this will sleep for 3 seconds"
time.sleep(2)
# print content
# content='Introduction to Social Network Methods
try:
url="http://fanyi.baidu.com/v2transapi"
data={}
data['from']='en'
data['to']='zh'
data['query']=content
data['transtype']='translang'
data['simple_means_flag']='3'
data=urllib.urlencode(data).encode("utf-8")
response=urllib.urlopen(url,data)
# post_html = requests.post(url,data=post_data)
html=response.read().decode("utf-8")
# print html
target=json.loads(html)
print target
if target.has_key('trans_result'):
tgt=target['trans_result']['data'][0]['dst']
# print tgt
writeDocx(tgt)
else:
print "传入段落出现不明问题,网站返回结果有无,第"+str(i)+"段跳过翻译"
except:
print "出现不明字符,第"+str(i)+"段跳过翻译"
return '\n'.join(fullText)
filename='mydocument.docx'
transDocx(filename)
给大家简单解释一下这段代码的含义
其中
def transDocx(docName):函数是用来翻译整篇文档的,
它先调用docx,读取文件的全部内容
doc = docx.Document(docName)
然后再解析段落,
paras = doc.paragraphs
这时候,我们就得到了一个字符串列表
其中的每一个元素就是一个段落的全部内容所组成的一个字符串
然后把每一个段落的内容发送到“百度翻译”,让它给我们解析
这里注意,每解析一段就要让程序休眠一两秒,因为如果发送内容太频繁,“百度翻译”会自动检查出来,认为你恶意占用资源,然后它会封了你的IP,那就惨了
因为我们之前已经知道了它的通讯方式,所以编辑一下代码:
url="http://fanyi.baidu.com/v2transapi"
data={}
data['from']='en'
data['to']='zh'
data['query']=content
data['transtype']='translang'
data['simple_means_flag']='3'
data=urllib.urlencode(data).encode("utf-8")
response=urllib.urlopen(url,data)
其中data是一个字典,它内部包含有通讯的全部内容,我们把它发给“百度翻译”
然后接收到response就是翻译结果,按照如下方式进行解析,就好了
这里我们借助docx插件来翻译好的内容写入另一个文件翻译结果.docx中,
如果你说你还没有安装pip,怎么办?
安装pip的方式如下:(够贴心吧~!)
http://www.cnblogs.com/NanShan2016/p/5518235.html