python爬取有道翻译实现自己的一个小翻译程序

相信大家在学编程的时候都会遇到自己不会的单词,而去网上百度,比如百度翻译啊,谷歌翻译啊,有道翻译啊,那么自己写一个是不是很有趣呢?下面就来解释一下爬取原理

用到的库有urllibjsontime,后两个都是python自带的库,所以只需要下载urllib库就可以,我用的python版本是3.7的,没有python的自行网上下载就可以

打开网页版本的有道 翻译,我用的是谷歌浏览器,不过其他浏览器应该也差不多,打开之后右击检查选项或者直接按F12都可以进入开发者模式,进入之后点击network会显示所有的网络请求,在上面的翻译板随便写一个要翻译的内容,点击翻译如下在这里插入图片描述
会看到显示很多的网络请求,那到底哪个会藏着我们想要的数据呢?根据上图,我们点击第一条数据进去看一下
在这里插入图片描述
点击对应的response响应文件看看有没有我们想要的数据,可以看到,我们在点击翻译按钮的时候,发送的请求就是上图中Request URL的那个URL,然后我们再点击那个Response,我们可以看到返回的结果
在这里插入图片描述
并且在headers中最底下有个from_data数据,该数据是json类型的,可以看到i的值使我们输入要翻译的内容,from跟to前者是接收,后者是输出
在这里插入图片描述
接下来我们就可以开始写程序了,导入包

import urllib.request
import json
import urllib.parse
import time

给它一个循环,实现执行一次可继续执行

while True:

获取url和headers,url就是上面headers里面的Request URL,headers就是headers里面的User-Agent,就是用户代理,用来模仿浏览器访问的,因为当时是用手机模式弄得,所以这里就不展示了,也可以用IP代理

url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers

上面说过from_data里面的数据是json数据类型的,如果json不会的还是自己去学一下先吧(因为这里不是主讲),所以在程序里面要把它弄成json数据类型,其实就是键-值的对应关系

form_Data = {} #用一个列表装着
    form_Data['i'] = content
    form_Data['from'] = 'AUTO'
    form_Data['to'] = 'AUTO'
    form_Data['smartresult'] = 'dict'
    form_Data['client'] = 'fanyideskweb'
    form_Data['doctype'] = 'json'
    form_Data['version'] = '2.1'
    form_Data['keyfrom'] = 'fanyi.web'
    form_Data['action'] = 'FY_BY_REALTIME'
    form_Data['typoResult'] = 'false'

获取url,请求头(request URL),数据之后进行解码,就是把乱七八糟的变成我们能看得懂的

data = urllib.parse.urlencode(form_Data).encode('utf-8') #以utf-8的形式
    req = urllib.request.Request(url, data, head)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8') #以utf-8的形式
    result = json.loads(html) #返回json数据

完整代码如下

import urllib.request
import json
import urllib.parse
import time


while True:
    url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
    head = {'http': '183.63.123.3:56489'}

    content = input('请输入要翻译的内容:') #接收用户输入
    if content == "q": #如果输入q并且回车则退出程序
        break

    form_Data = {}
    form_Data['i'] = content
    form_Data['from'] = 'AUTO'
    form_Data['to'] = 'AUTO'
    form_Data['smartresult'] = 'dict'
    form_Data['client'] = 'fanyideskweb'
    form_Data['doctype'] = 'json'
    form_Data['version'] = '2.1'
    form_Data['keyfrom'] = 'fanyi.web'
    form_Data['action'] = 'FY_BY_REALTIME'
    form_Data['typoResult'] = 'false'

    data = urllib.parse.urlencode(form_Data).encode('utf-8')
    req = urllib.request.Request(url, data, head)
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')

    result = json.loads(html)

    print("翻译的结果是:%s" % (result['translateResult'][0][0]['tgt'])) #打印json数据中键对应的值
    time.sleep(1) #延时一秒

效果图如下,是不是挺简单又好玩呢?
在这里插入图片描述
正在尝试写博客,把会的分享给你们,如有写的不好的地方,希望指点一下,谢谢!

猜你喜欢

转载自blog.csdn.net/Woo_home/article/details/86631334