python爬有道翻译
程序员文章站
2022-06-20 20:11:14
在有道翻译页面中打开开发者工具,在Headers板块找到Request URL以及相应的data。 上面这种很大可能被有道网页给识别出来不是人工在访问,而是代码在访问。 此时我们可以加个‘User-Agent’代理。通过设置User Agent来达到隐藏身份的目的,一般情况下浏览器是通过User-A ......
在有道翻译页面中打开开发者工具,在headers板块找到request url以及相应的data。
import urllib.request import urllib.parse import json content=input('请输入需要翻译的内容:') #_o要去掉,否则会出先error_code:50的报错 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' data={} #开发者工具里有,i和doctype键不可少 data['i']=content data['from']='auto' data['to']='auto' data['smartresult']='dict' data['client']='fanyideskweb' data['salt']='15695569180611' data['sign']='5b0565493d812bc5e713b895c12d615d' data['doctype']='json' data['version']='2.1' data['keyfrom']='fanyi.web' data['action']='fy_by_realttime' #将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型 data=urllib.parse.urlencode(data).encode('utf-8') #向url请求data的响应结果 response=urllib.request.urlopen(url,data) #读取返回数据内容,decode是转换返回数据的格式为str html=response.read().decode('utf-8') #使用json将字符串转化成字典 target=json.loads(html) #结果在key='translateresult'的三层列表的key='tgt'中 print("翻译结果:%s" %(target['translateresult'][0][0]['tgt']))
上面这种很大可能被有道网页给识别出来不是人工在访问,而是代码在访问。
此时我们可以加个‘user-agent’代理。通过设置user agent来达到隐藏身份的目的,一般情况下浏览器是通过user-agent来识别的。
通过调用urllib.request.request()来设置ua。
class urllib.request.request(url, data=none, headers={}, origin_req_host=none, unverifiable=false, method=none) this class is an abstraction of a url request.
url should be a string containing a valid url.
headers should be a dictionary #headers要为字典
有两种方法设置user agent:
1.在创建request对象的时候,填入headers参数(包含user agent信息),这个headers参数要求为字典;
2.在创建request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。
import urllib.request import urllib.parse import json import time while true: content=input('请输入需要翻译的内容(输入"q!退出程序"):') if content=='q!': break; #_o要去掉,否则会出先error_code:50的报错 url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule' ''' 第一种方法 head={} head['user-agent']='mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36' ''' data={} #开发者工具里有,i和doctype键不可少 data['i']=content data['from']='auto' data['to']='auto' data['smartresult']='dict' data['client']='fanyideskweb' data['salt']='15695569180611' data['sign']='5b0565493d812bc5e713b895c12d615d' data['doctype']='json' data['version']='2.1' data['keyfrom']='fanyi.web' data['action']='fy_by_realttime' #将字典类型的请求数据转化为url编码,并将编码类型转变为'utf-8'类型 data=urllib.parse.urlencode(data).encode('utf-8') ''' 第一种方法 req=urllib.request.request(url,data,head) ''' #第二种方法设置user agent #创建request对象 req=urllib.request.request(url,data) req.add_header('user-agent','mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/65.0.3325.181 safari/537.36') #传入创建好的request对象 response=urllib.request.urlopen(req) #读取响应信息并解码 html=response.read().decode('utf-8') #使用json将字符串转化成字典 target=json.loads(html) #结果在key='translateresult'的三层列表的key='tgt'中 print("翻译结果:%s" %(target['translateresult'][0][0]['tgt'])) #5秒一次 time.sleep(5)
上一篇: 函数的初始