利用python爬虫实现简单翻译软件
2017-12-18 21:58
555 查看
近期,在做项目中,有一个问题一直困扰着我,就是翻译英文太难,中文毕竟还是母语,所以读写看还是方便的多,但因为项目中处理的都是英文的部分,所以,想做一个小的爬虫程序,来实现翻译的功能。有了这个目标,OK,现在开始实现。
首先,需要简单的了解一下爬虫,尽可能简单快速的上手,我希望可以在今天下午四点的时候搞定基础知识,其次,需要了解的是百度的API的接口,搞定这个之后,谷歌翻译会更加麻烦一点,先搞定百度翻译,然后再解决谷歌翻译的事情,最后,按照官方给出的demo,然后写自己的一个小程序。
第一个部分:Python爬虫的基础知识
1,使用的第三方库:urllib, urllib2,利用这些库我们可以得到网页的内容。
2,Python正则表达式,用于匹配表达式,可以视为抽取的作用,把我们想要的部分可以抽取出来。
3,爬虫的Scrapy框架。这个是后续的内容啦。
详见官方文档:http://doc.scrapy.org/en/latest/
4,URL,统一资源定位符,即我们需要到达的目的地址
DNS,域名系统,就是IP的另一个名字,我们只需要知道别名,就可以访问到那个IP地址了。
HTML代码,网页的实质,利用谷歌的审查元素就可以看到网页呈现的格式。
5,简单的爬虫的教程,感谢大神的分享, 我就直接贴上大神的网址,以便后续遗忘时的查看。http://python.jobbole.com/81336/
6,数据传送的二种方式:post和get方式
简单的网页抓取是静态的网页,但很多时候,是动态的网页,需要我们传递数据给服务器来获得所需要的网页数据,所以数据传送的方式分为二种,post方式和get方式。
get方式是直接以链接的方式来访问,链接中包含了所有的参数,用户可以方便直观的查看自己提交的内容,但不太安全;post方式则不会再网址上显示所有的参数,查看提交的内容不方便,但相对而言比较安全。
post方式:(对于数据具有隐藏功能)
get方式:(显式的显现数据)
4000
7,设置Headers
站点对于简单的方式访问并不买账,这个时候并不会返回任何内容,不会响应,所以需要模拟浏览器的工作,所以需要设置一些Headers的属性,让我们的访问类似于浏览器的访问。
在头部Headers中,有很多文件编码,压缩方式,请求的agent等信息,如果没有请求的身份,那么服务器不一定会有响应,所以我们在头部数据中加入agent信息,来模拟浏览器的行为。对于headers中的“反盗链”的方式,需要判断的是referer字段,判断是不是它自己,如果不是,则不会响应。
8,设置代理Proxy
9, Timeout设置
10,cookie的使用
一直说cookie,cookie,到底是什么东西,是指某些网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据。比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的,那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。
首先,我们需要的是一个opener的实例,之前我们采用的urlopen,是一个简单的opener实例,传入的参数仅仅是url,data,timeout,而我们需要更复杂的功能时,这个是满足不了我们的要求的,所以我们需要创建更一般的opener来实现Cookie的设置。
其次,我们采用cookielib模块,来提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源,Cookielib模块功能非常强大,我们可以利用本模块的CookierJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar,FileCookieJar,MozillaCookieJar,LWPCookieJar.
具体的教程:http://python.jobbole.com/81344/
11,正则表达式
正则表达式是对字符串操作的一种逻辑公式,是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个“规则字符串”,用于对字符串的一种过滤逻辑。
第二部分:了解百度翻译的API
首先,需要在百度翻译平台来进行注册http://api.fanyi.baidu.com/api/trans/product/apidoc
在管理控制台来找到自己的APP ID和密钥。
提交URL后的返回值为JSON格式,利用json模块来进行解析。
第三部分:具体的实现(初步的简易实现版本已经获得~~,开心·~待我加一个界面进去)
1,Tkinter的使用
这里我们采用的是Tkinter,是python自带的一个库,是一个图形库,Tk会调用操作系统提供的本地的GUI接口,完成最终的GUI。
继续Tkinter的学习,,我也在怀疑自己,我是不是应该为了找工作做准备呀,一直沉浸在自己的小世界中,是不是不太好。。。不管,今天要做一个小的界面出来。
简单的教程,参见大神的博客,我把参考的博客贴出来,以便后续的复习。
http://blog.csdn.net/wangyiyan315/article/details/16361065
大佬千千万,你说厉不厉害,就问你说厉害不厉害~~
对于Tkinter可以设置窗口的标题,窗口的大小,以及改变窗口的长宽问题;
其次说明其中的一些组件以及容器的概念
详情参见:https://www.cnblogs.com/kaituorensheng/p/3287652.html
http://lib.csdn.net/article/python/3615
具体的程序,我贴到这里,第一次做,能力有限,界面有点丑,之后改进。
出来的效果图:
哇卡哇卡,,完成一次小的实践操作呢·~
首先,需要简单的了解一下爬虫,尽可能简单快速的上手,我希望可以在今天下午四点的时候搞定基础知识,其次,需要了解的是百度的API的接口,搞定这个之后,谷歌翻译会更加麻烦一点,先搞定百度翻译,然后再解决谷歌翻译的事情,最后,按照官方给出的demo,然后写自己的一个小程序。
第一个部分:Python爬虫的基础知识
1,使用的第三方库:urllib, urllib2,利用这些库我们可以得到网页的内容。
2,Python正则表达式,用于匹配表达式,可以视为抽取的作用,把我们想要的部分可以抽取出来。
3,爬虫的Scrapy框架。这个是后续的内容啦。
详见官方文档:http://doc.scrapy.org/en/latest/
4,URL,统一资源定位符,即我们需要到达的目的地址
DNS,域名系统,就是IP的另一个名字,我们只需要知道别名,就可以访问到那个IP地址了。
HTML代码,网页的实质,利用谷歌的审查元素就可以看到网页呈现的格式。
5,简单的爬虫的教程,感谢大神的分享, 我就直接贴上大神的网址,以便后续遗忘时的查看。http://python.jobbole.com/81336/
6,数据传送的二种方式:post和get方式
简单的网页抓取是静态的网页,但很多时候,是动态的网页,需要我们传递数据给服务器来获得所需要的网页数据,所以数据传送的方式分为二种,post方式和get方式。
get方式是直接以链接的方式来访问,链接中包含了所有的参数,用户可以方便直观的查看自己提交的内容,但不太安全;post方式则不会再网址上显示所有的参数,查看提交的内容不方便,但相对而言比较安全。
post方式:(对于数据具有隐藏功能)
import urllib import urllib2 values = {} values['username'] = "1016903103@qq.com" values['password'] = "XXXX" data = urllib.urlencode(values) url = "http://passport.csdn.net/account/login?from=http://my.csdn.net/my/mycsdn" request = urllib2.Request(url,data) response = urllib2.urlopen(request) print response.read()
get方式:(显式的显现数据)
4000
import urllib import urllib2 values={} values['username'] = "1016903103@qq.com" values['password']="XXXX" data = urllib.urlencode(values) url = "http://passport.csdn.net/account/login" geturl = url + "?"+data request = urllib2.Request(geturl) response = urllib2.urlopen(request) print response.read()
7,设置Headers
站点对于简单的方式访问并不买账,这个时候并不会返回任何内容,不会响应,所以需要模拟浏览器的工作,所以需要设置一些Headers的属性,让我们的访问类似于浏览器的访问。
在头部Headers中,有很多文件编码,压缩方式,请求的agent等信息,如果没有请求的身份,那么服务器不一定会有响应,所以我们在头部数据中加入agent信息,来模拟浏览器的行为。对于headers中的“反盗链”的方式,需要判断的是referer字段,判断是不是它自己,如果不是,则不会响应。
User-Agent : 有些服务器或 Proxy 会通过该值来判断是否是浏览器发出的请求 Content-Type : 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中的内容该怎样解析。 application/xml : 在 XML RPC,如 RESTful/SOAP 调用时使用 application/json : 在 JSON RPC 调用时使用 application/x-www-form-urlencoded : 浏览器提交 Web 表单时使用 在使用服务器提供的 RESTful 或 SOAP 服务时, Content-Type 设置错误会导致服务器拒绝服务
8,设置代理Proxy
import urllib2 enable_proxy = True proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'}) null_proxy_handler = urllib2.ProxyHandler({}) if enable_proxy: opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener)
9, Timeout设置
10,cookie的使用
一直说cookie,cookie,到底是什么东西,是指某些网站为了辨别用户身份,进行session跟踪而存储在用户本地终端上的数据。比如说有些网站需要登录后才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的,那么我们可以利用Urllib2库保存我们登录的Cookie,然后再抓取其他页面就达到目的了。
首先,我们需要的是一个opener的实例,之前我们采用的urlopen,是一个简单的opener实例,传入的参数仅仅是url,data,timeout,而我们需要更复杂的功能时,这个是满足不了我们的要求的,所以我们需要创建更一般的opener来实现Cookie的设置。
其次,我们采用cookielib模块,来提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源,Cookielib模块功能非常强大,我们可以利用本模块的CookierJar类的对象来捕获cookie并在后续连接请求时重新发送,比如可以实现模拟登录功能。该模块主要的对象有CookieJar,FileCookieJar,MozillaCookieJar,LWPCookieJar.
具体的教程:http://python.jobbole.com/81344/
11,正则表达式
正则表达式是对字符串操作的一种逻辑公式,是用事先定义好的一些特定字符,及这些特定字符的组合,组成一个“规则字符串”,用于对字符串的一种过滤逻辑。
第二部分:了解百度翻译的API
首先,需要在百度翻译平台来进行注册http://api.fanyi.baidu.com/api/trans/product/apidoc
在管理控制台来找到自己的APP ID和密钥。
例:将apple从英文翻译成中文: 请求参数: q=apple from=en to=zh appid=2015063000000001 salt=1435660288 平台分配的密钥: 12345678 生成sign: >拼接字符串1 拼接appid=2015063000000001+q=apple+salt=1435660288+密钥=12345678 得到字符串1 =2015063000000001apple143566028812345678 >计算签名sign(对字符串1做md5加密,注意计算md5之前,串1必须为UTF-8编码) sign=md5(2015063000000001apple143566028812345678) sign=f89f9594663708c1605f3d736d01d2d4 完整请求为: http://api.fanyi.baidu.com/api/trans/vip/translate?q=apple&from=en&to=zh&appid=2015063000000001&salt=1435660288&sign=f89f9594663708c1605f3d736d01d2d4 也可以使用POST方法传送需要的参数。
提交URL后的返回值为JSON格式,利用json模块来进行解析。
第三部分:具体的实现(初步的简易实现版本已经获得~~,开心·~待我加一个界面进去)
1,Tkinter的使用
这里我们采用的是Tkinter,是python自带的一个库,是一个图形库,Tk会调用操作系统提供的本地的GUI接口,完成最终的GUI。
插个题外话,感觉自己越做越大的样子,,想想有点幸福呢,有想法就去做,等等就实现不了了。。。
继续Tkinter的学习,,我也在怀疑自己,我是不是应该为了找工作做准备呀,一直沉浸在自己的小世界中,是不是不太好。。。不管,今天要做一个小的界面出来。
简单的教程,参见大神的博客,我把参考的博客贴出来,以便后续的复习。
http://blog.csdn.net/wangyiyan315/article/details/16361065
大佬千千万,你说厉不厉害,就问你说厉害不厉害~~
对于Tkinter可以设置窗口的标题,窗口的大小,以及改变窗口的长宽问题;
其次说明其中的一些组件以及容器的概念
详情参见:https://www.cnblogs.com/kaituorensheng/p/3287652.html
http://lib.csdn.net/article/python/3615
具体的程序,我贴到这里,第一次做,能力有限,界面有点丑,之后改进。
# -*- coding: utf-8 -*- import httplib import md5 import urllib import json import random from Tkinter import * import tkMessageBox from preprocess.utils import tools import codecs sys.path.append("./preprocess/data") httpClient = None class Application(): def __init__(self): self._from = 'en' self._to = 'zh' self._appid = '**********' # 安全起见,我就注释掉了 self._key = '********' self.root = Tk() self.root.title("翻译小软件-赵越") self.root.geometry('800x800') self.load_sys() self.frm = Frame(self.root) Label(self.frm, text="需要翻译的句子").pack() self.l = Listbox(self.frm, width=80, height=20) self.l.pack() for item in self.text: self.l.insert(END, item) self.Button1 = Button(self.frm, text="翻译", command=self.GetResult) self.Button1.pack() self.Button2 = Button(self.frm, text="No Need", command=self.Getremove) self.Button2.pack() self.frm.pack() def load_sys(self): filename = tools.file_find("tweet_classification/train/tweets_test.txt") file_m = codecs.open(filename, 'r') self.text = [] for line in file_m.readlines(): line = line.strip().split('\t') texts = line[0] self.text.append(texts) def Getremove(self): self.l.delete(self.l.curselection()) def GetResult(self): q = self.l.get(self.l.curselection()) q = q.encode('utf8') myurl = '/api/trans/vip/translate' salt = random.randint(10001, 99999) sign = self._appid + q + str(salt) + self._key m1 = md5.new() m1.update(sign) sign = m1.hexdigest() myurl = myurl+'?appid='+self._appid+'&q='+urllib.quote(q)+'&from='+self._from+'&to='+self._to+'&salt='+str(salt)+'&sign='+sign try: httpClient = httplib.HTTPConnection('api.fanyi.baidu.com') httpClient.request('GET', myurl) response = httpClient.getresponse() TransResult = response.read() data = json.loads(TransResult) # print data dst = data['trans_result'][0]['dst'] # print dst tkMessageBox.showinfo('text', "text is: %s" % dst) # return self._dst except: print "error" # ----------- 程序的入口 ----------- app = Application() mainloop()
出来的效果图:
哇卡哇卡,,完成一次小的实践操作呢·~
相关文章推荐
- 利用python实现简单的爬虫
- 利用python实现简单的爬虫,爬百度文库相关词条信息
- 利用python 实现简单 爬虫
- python翻译软件实现代码(使用google api完成)
- python实现简单爬虫功能
- python实现简单爬虫模拟登录淘宝(cookie简介)
- Pyton实现简单爬虫和正则表达式的利用
- 地址方法[ios开发]利用有道翻译API实现简单的翻译功能地址方法
- 【原创源码】(03):利用简单递归算法,实现文本匹配、翻译。
- Python实现抓取页面上链接的简单爬虫分享
- python利用beautifulSoup实现爬虫
- python实现简单爬虫功能
- 利用Bing翻译API简单的实现一个翻译工具
- Python实现爬取知乎神回复简单爬虫代码分享
- 1. python实现简单爬虫功能
- 实现一个简单的邮箱地址爬虫(python)
- [ios开发]利用有道翻译API实现简单的翻译功能
- 利用字典实现Python中简单的ORM映射
- python翻译软件实现代码(使用google api完成)
- python实现简单爬虫功能