鱼C论坛

 找回密码
 立即注册
查看: 4367|回复: 32

[已解决]小甲鱼爬虫课程 - 爬虫访问在线翻译

[复制链接]
回帖奖励 10 鱼币 回复本帖可获得 5 鱼币奖励! 每人限 1 次
发表于 2020-12-17 14:26:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 allearn_Python 于 2020-12-17 14:26 编辑

自己按照视频课程尝试用爬虫访问bing在线翻译时,得不到预期结果,求大佬指点迷津。


bing在线翻译网址

bing在线翻译网址

↑↑ 这是根据视频找到的URL

翻译结果.png
↑↑ 显示翻译没问题


data.png
↑↑ 这是DATA字典内容


根据视频课程我写了程序如下:
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. head = {}
  5. head['Uers-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  6. url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
  7. data = {}
  8. data['from'] = 'zh-Hans'
  9. data['to'] = 'en'
  10. data['text'] = '你好中国'
  11. data['translation'] = ''

  12. data = urllib.parse.urlencode(data).encode('utf-8')

  13. req = urllib.request.Request(url,data,head)
  14. response = urllib.request.urlopen(req)


  15. html = response.getcode()

  16. print(html)
  17. html = response.read().decode('utf-8')
  18. print(html)
复制代码


但运行结果是:
结果.png


请问该怎么改正

最佳答案
2020-12-17 14:39:16
allearn_Python 发表于 2020-12-17 14:36
但我想实现的是在线翻译,输入什么就翻译什么,
data['translation'] 里面给定值得话,一直就是这 ...

  1. import urllib.request
  2. import urllib.parse
  3. import json
  4. i=0

  5. print('输入0结束程序:')
  6. while 1:
  7.    
  8.     while True:
  9.         content=input('请输入需要翻译的内容:')
  10.         if content=='':
  11.             print('请重新输入:')
  12.         else:
  13.             break
  14.             
  15.     if content=='0':
  16.         break
  17.     if i==0:
  18.         
  19.         url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
  20.         head={}
  21.         head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
  22.         data={}
  23.         data['i']=content
  24.         data['from']='AUTO'
  25.         data['to']='AUTO'
  26.         data['smartresult']='dict'
  27.         data['client']='fanyideskweb'
  28.         data['salt']='16079142839884'
  29.         data['sign']='7fa30595c70a9a765816fda28b64b9ac'
  30.         data['lts']='1607914283988'
  31.         data['bv']='4b9de992aa3d23c2999121d735e53f9c'
  32.         data['doctype']='json'
  33.         data['version']='2.1'
  34.         data['keyfrom']='fanyi.web'
  35.         data['action']='FY_BY_REALTlME'



  36.         data=urllib.parse.urlencode(data).encode('utf-8')
  37.         req=urllib.request.Request(url,data,head)
  38.         response=urllib.request.urlopen(req)

  39.         html=response.read().decode('utf-8')
  40.         target=json.loads(html)

  41.         print('翻译结果:%s'%(target['translateResult'][0][0]["tgt"]))
  42.         

复制代码

可以参考一下我这个
有帮助的话希望给个最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-17 14:29:35 | 显示全部楼层

回帖奖励 +5 鱼币

本帖最后由 小伤口 于 2020-12-17 14:35 编辑

data['translation'] = ''要把Hello China也得打上
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. head = {}
  5. head['Uers-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  6. url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
  7. data = {}
  8. data['from'] = 'zh-Hans'
  9. data['to'] = 'en'
  10. data['text'] = '你好中国'
  11. data['translation'] = 'hello china'

  12. data = urllib.parse.urlencode(data).encode('utf-8')

  13. req = urllib.request.Request(url,data,head)
  14. response = urllib.request.urlopen(req)


  15. html = response.getcode()


  16. html = response.read().decode('utf-8')
  17. print(html)

复制代码
  1. ==================== RESTART: C:/Users/ASUS/Desktop/嗨.py ====================
  2. [{"normalizedSource":"你好中国","normalizedTarget":"hello china","examples":[]}]
  3. >>>
复制代码

多打了一个print(html)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 14:36:03 | 显示全部楼层
小伤口 发表于 2020-12-17 14:29
data['translation'] = ''要把Hello China也得打上

多打了一个print(html)
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. content = input('请输入要翻译的内容:')

  5. head = {}
  6. head['Uers-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
  7. url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
  8. data = {}
  9. data['from'] = 'zh-Hans'
  10. data['to'] = 'en'
  11. data['text'] = content
  12. data['translation'] = 'hello china'

  13. data = urllib.parse.urlencode(data).encode('utf-8')

  14. req = urllib.request.Request(url,data,head)
  15. response = urllib.request.urlopen(req)


  16. html = response.getcode()

  17. print(html)
  18. html = response.read().decode('utf-8')
  19. print(html)
复制代码


但我想实现的是在线翻译,输入什么就翻译什么,
data['translation'] 里面给定值得话,一直就是这个值了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 14:38:01 | 显示全部楼层
allearn_Python 发表于 2020-12-17 14:36
但我想实现的是在线翻译,输入什么就翻译什么,
data['translation'] 里面给定值得话,一直就是这 ...

你可以先设置一个a放在data['translation'] = a
上面再用a=input(‘.....’)(当然其他字母也可以)
这样就可以实现了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 14:39:16 | 显示全部楼层    本楼为最佳答案   
allearn_Python 发表于 2020-12-17 14:36
但我想实现的是在线翻译,输入什么就翻译什么,
data['translation'] 里面给定值得话,一直就是这 ...

  1. import urllib.request
  2. import urllib.parse
  3. import json
  4. i=0

  5. print('输入0结束程序:')
  6. while 1:
  7.    
  8.     while True:
  9.         content=input('请输入需要翻译的内容:')
  10.         if content=='':
  11.             print('请重新输入:')
  12.         else:
  13.             break
  14.             
  15.     if content=='0':
  16.         break
  17.     if i==0:
  18.         
  19.         url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
  20.         head={}
  21.         head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
  22.         data={}
  23.         data['i']=content
  24.         data['from']='AUTO'
  25.         data['to']='AUTO'
  26.         data['smartresult']='dict'
  27.         data['client']='fanyideskweb'
  28.         data['salt']='16079142839884'
  29.         data['sign']='7fa30595c70a9a765816fda28b64b9ac'
  30.         data['lts']='1607914283988'
  31.         data['bv']='4b9de992aa3d23c2999121d735e53f9c'
  32.         data['doctype']='json'
  33.         data['version']='2.1'
  34.         data['keyfrom']='fanyi.web'
  35.         data['action']='FY_BY_REALTlME'



  36.         data=urllib.parse.urlencode(data).encode('utf-8')
  37.         req=urllib.request.Request(url,data,head)
  38.         response=urllib.request.urlopen(req)

  39.         html=response.read().decode('utf-8')
  40.         target=json.loads(html)

  41.         print('翻译结果:%s'%(target['translateResult'][0][0]["tgt"]))
  42.         

复制代码

可以参考一下我这个
有帮助的话希望给个最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 14:49:26 | 显示全部楼层
小伤口 发表于 2020-12-17 14:38
你可以先设置一个a放在data['translation'] = a
上面再用a=input(‘.....’)(当然其他字母也可以)
这 ...

这个不对。
我的代码里面是:
content = input('请输入要翻译的内容:')
data['text'] = content
这个"text"才是对应要翻译的内容,而"translation"是翻译的结果。

我想要输入任意内容就能获得翻译结果,但现在的代码是如果我给定了"translation"的值,那翻译结果一直是这个值;如果我注释掉data['translation'] = 'xxx' 的话,就返回{"statusCode":400} 这样的错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 14:52:07 | 显示全部楼层
小伤口 发表于 2020-12-17 14:39
可以参考一下我这个
有帮助的话希望给个最佳

感谢
我参考一下看我错在了哪里[捂脸]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 15:09:57 | 显示全部楼层
allearn_Python 发表于 2020-12-17 14:49
这个不对。
我的代码里面是:
content = input('请输入要翻译的内容:')


我发现了
嗯,,,,,,我举得最好的办法就是换个翻译网站?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 15:29:46 | 显示全部楼层
小伤口 发表于 2020-12-17 15:09
我发现了
嗯,,,,,,我举得最好的办法就是换个翻译网站?

bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 15:36:52 | 显示全部楼层
allearn_Python 发表于 2020-12-17 15:29
bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢

我刚刚去试了一下bing,我也不会
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 15:48:44 | 显示全部楼层
allearn_Python 发表于 2020-12-17 15:29
bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢
  1. import requests

  2. url = 'https://cn.bing.com/ttranslate?&category=&IG=C4A52C35D175427988E6510779DEFB5F&IID=translator.5036.8'

  3. def translate_weiruan(info,fr='zh-CHS',to="en"):
  4.     print('翻译结果:'+requests.post(url,data={'text':info,'from':fr,'to':to,'doctype':'json'}).json()['translationResponse'])

  5. def is_Chinese(str):       #判断输入的内容是否是中文
  6.     for ch in str:
  7.         if '\u4e00' <= ch <= '\u9fff':
  8.             return True
  9.         else:
  10.             return False

  11. def start_translate():
  12.     trans = input('翻译内容:')
  13.     if is_Chinese(trans):        #实现自动判断,中英互译
  14.         translate_weiruan(trans)
  15.     else:
  16.         translate_weiruan(trans,fr='en',to='zh-CHS')

  17. if __name__ == '__main__':
  18.     print('          翻译结果由微软翻译提供!(请确保网络已连接)')
  19.     while True:
  20.         start_translate()
  21.         print('\n')

复制代码

这是我网上找的代码不过是用requests模块你可以先安装试试参考一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 16:22:36 | 显示全部楼层
小伤口 发表于 2020-12-17 15:48
这是我网上找的代码不过是用requests模块你可以先安装试试参考一下

好的,谢谢谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 17:08:20 | 显示全部楼层
小伤口 发表于 2020-12-17 14:39
可以参考一下我这个
有帮助的话希望给个最佳
  1. 输入0结束程序:
  2. 请输入需要翻译的内容:你好
  3. Traceback (most recent call last):
  4.   File "D:/03-其他/个人/Training Course/翻译协调标准/dalao.py", line 45, in <module>
  5.     target=json.loads(html)
  6.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
  7.     return _default_decoder.decode(s)
  8.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
  9.     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  10.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 355, in raw_decode
  11.     raise JSONDecodeError("Expecting value", s, err.value) from None
  12. json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
复制代码


你给的参考程序刚开始运行还一切正常,后来再运行出现这个错误,请问能解决吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:19:04 | 显示全部楼层
本帖最后由 小伤口 于 2020-12-17 17:20 编辑
allearn_Python 发表于 2020-12-17 17:08
你给的参考程序刚开始运行还一切正常,后来再运行出现这个错误,请问能解决吗


应该是偶然错误吧,一直都出现这个问题吗
毕竟不是每次都能成功的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 17:23:06 | 显示全部楼层
小伤口 发表于 2020-12-17 17:19
应该是偶然错误吧,一直都出现这个问题吗
毕竟不是每次都能成功的

现在一直出现这个错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:25:00 | 显示全部楼层
allearn_Python 发表于 2020-12-17 17:23
现在一直出现这个错误

发一下你保存我的代码我看一看吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 17:32:31 | 显示全部楼层
小伤口 发表于 2020-12-17 17:25
发一下你保存我的代码我看一看吧
  1. import urllib.request
  2. import urllib.parse
  3. import json
  4. i=0

  5. print('输入0结束程序:')
  6. while 1:
  7.    
  8.     while True:
  9.         content=input('请输入需要翻译的内容:')
  10.         if content=='':
  11.             print('请重新输入:')
  12.         else:
  13.             break
  14.             
  15.     if content=='0':
  16.         break
  17.     if i==0:
  18.         
  19.         url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
  20.         head={}
  21.         head['User-Agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
  22.         data={}
  23.         data['i']=content
  24.         data['from']='AUTO'
  25.         data['to']='AUTO'
  26.         data['smartresult']='dict'
  27.         data['client']='fanyideskweb'
  28.         data['salt']='16079142839884'
  29.         data['sign']='7fa30595c70a9a765816fda28b64b9ac'
  30.         data['lts']='1607914283988'
  31.         data['bv']='4b9de992aa3d23c2999121d735e53f9c'
  32.         data['doctype']='json'
  33.         data['version']='2.1'
  34.         data['keyfrom']='fanyi.web'
  35.         data['action']='FY_BY_REALTlME'



  36.         data=urllib.parse.urlencode(data).encode('utf-8')
  37.         req=urllib.request.Request(url,data,head)
  38.         response=urllib.request.urlopen(req)

  39.         html=response.read().decode('utf-8')
  40.         target=json.loads(html)

  41.         print('翻译结果:%s'%(target['translateResult'][0][0]["tgt"]))
  42.         

复制代码


你看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:35:18 | 显示全部楼层
  1. Type "copyright", "credits" or "license()" for more information.
  2. >>>
  3. ==================== RESTART: C:/Users/ASUS/Desktop/嗨.py ====================
  4. 输入0结束程序:
  5. 请输入需要翻译的内容:哈哈
  6. 翻译结果:Ha ha
  7. 请输入需要翻译的内容:我最帅
  8. 翻译结果:I am the most handsome
  9. 请输入需要翻译的内容:你最帅
  10. 翻译结果:You are the most handsome
  11. 请输入需要翻译的内容:
复制代码

我运行没毛病欸
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:40:25 | 显示全部楼层
还是有问题吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-17 17:41:22 | 显示全部楼层
  1. Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
  2. Type "help", "copyright", "credits" or "license()" for more information.
  3. >>>
  4. ============= RESTART: D:/03-其他/个人/Training Course/翻译协调标准/xin_1.py =============
  5. 输入0结束程序:
  6. 请输入需要翻译的内容:重新试一下
  7. Traceback (most recent call last):
  8.   File "D:/03-其他/个人/Training Course/翻译协调标准/xin_1.py", line 45, in <module>
  9.     target=json.loads(html)
  10.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\__init__.py", line 357, in loads
  11.     return _default_decoder.decode(s)
  12.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 337, in decode
  13.     obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  14.   File "C:\Users\Allen\AppData\Local\Programs\Python\Python38\lib\json\decoder.py", line 355, in raw_decode
  15.     raise JSONDecodeError("Expecting value", s, err.value) from None
  16. json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  17. >>>
复制代码


可能是我不够帅哈哈哈哈哈   哎,这随便哪里蹦出个小问题我就不会了
还是感谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 01:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表