鱼C论坛

 找回密码
 立即注册
查看: 3412|回复: 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字典内容


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

head = {}
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'
url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
data = {}
data['from'] = 'zh-Hans'
data['to'] = 'en'
data['text'] = '你好中国'
data['translation'] = ''

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

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


html = response.getcode()

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

但运行结果是:
结果.png


请问该怎么改正

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

import urllib.request
import urllib.parse
import json
i=0

print('输入0结束程序:')
while 1:
    
    while True:
        content=input('请输入需要翻译的内容:')
        if content=='':
            print('请重新输入:')
        else:
            break
            
    if content=='0':
        break
    if i==0:
        
        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/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
        data={}
        data['i']=content
        data['from']='AUTO'
        data['to']='AUTO'
        data['smartresult']='dict'
        data['client']='fanyideskweb'
        data['salt']='16079142839884'
        data['sign']='7fa30595c70a9a765816fda28b64b9ac'
        data['lts']='1607914283988'
        data['bv']='4b9de992aa3d23c2999121d735e53f9c'
        data['doctype']='json'
        data['version']='2.1'
        data['keyfrom']='fanyi.web'
        data['action']='FY_BY_REALTlME'



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

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

        print('翻译结果:%s'%(target['translateResult'][0][0]["tgt"]))
        
可以参考一下我这个
有帮助的话希望给个最佳
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +5 鱼币

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

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

head = {}
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'
url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
data = {}
data['from'] = 'zh-Hans'
data['to'] = 'en'
data['text'] = '你好中国'
data['translation'] = 'hello china'

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

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


html = response.getcode()


html = response.read().decode('utf-8')
print(html)
==================== RESTART: C:/Users/ASUS/Desktop/嗨.py ====================
[{"normalizedSource":"你好中国","normalizedTarget":"hello china","examples":[]}]
>>> 
多打了一个print(html)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

head = {}
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'
url = "https://cn.bing.com/texamplev3?isVertical=1&&IG=E496D5184E5745EC8154364A8EDB9756&IID=translator.5025.2"
data = {}
data['from'] = 'zh-Hans'
data['to'] = 'en'
data['text'] = content
data['translation'] = 'hello china'

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

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


html = response.getcode()

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

但我想实现的是在线翻译,输入什么就翻译什么,
data['translation'] 里面给定值得话,一直就是这个值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你可以先设置一个a放在data['translation'] = a
上面再用a=input(‘.....’)(当然其他字母也可以)
这样就可以实现了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import urllib.request
import urllib.parse
import json
i=0

print('输入0结束程序:')
while 1:
    
    while True:
        content=input('请输入需要翻译的内容:')
        if content=='':
            print('请重新输入:')
        else:
            break
            
    if content=='0':
        break
    if i==0:
        
        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/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
        data={}
        data['i']=content
        data['from']='AUTO'
        data['to']='AUTO'
        data['smartresult']='dict'
        data['client']='fanyideskweb'
        data['salt']='16079142839884'
        data['sign']='7fa30595c70a9a765816fda28b64b9ac'
        data['lts']='1607914283988'
        data['bv']='4b9de992aa3d23c2999121d735e53f9c'
        data['doctype']='json'
        data['version']='2.1'
        data['keyfrom']='fanyi.web'
        data['action']='FY_BY_REALTlME'



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

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

        print('翻译结果:%s'%(target['translateResult'][0][0]["tgt"]))
        
可以参考一下我这个
有帮助的话希望给个最佳
想知道小甲鱼最近在做啥?请访问 -> 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} 这样的错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢
我参考一下看我错在了哪里[捂脸]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


我发现了
嗯,,,,,,我举得最好的办法就是换个翻译网站?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我刚刚去试了一下bing,我也不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

if __name__ == '__main__':
    print('          翻译结果由微软翻译提供!(请确保网络已连接)')
    while True:
        start_translate()
        print('\n')
这是我网上找的代码不过是用requests模块你可以先安装试试参考一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,谢谢谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你给的参考程序刚开始运行还一切正常,后来再运行出现这个错误,请问能解决吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


应该是偶然错误吧,一直都出现这个问题吗
毕竟不是每次都能成功的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

现在一直出现这个错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

发一下你保存我的代码我看一看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

print('输入0结束程序:')
while 1:
    
    while True:
        content=input('请输入需要翻译的内容:')
        if content=='':
            print('请重新输入:')
        else:
            break
            
    if content=='0':
        break
    if i==0:
        
        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/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'
        data={}
        data['i']=content
        data['from']='AUTO'
        data['to']='AUTO'
        data['smartresult']='dict'
        data['client']='fanyideskweb'
        data['salt']='16079142839884'
        data['sign']='7fa30595c70a9a765816fda28b64b9ac'
        data['lts']='1607914283988'
        data['bv']='4b9de992aa3d23c2999121d735e53f9c'
        data['doctype']='json'
        data['version']='2.1'
        data['keyfrom']='fanyi.web'
        data['action']='FY_BY_REALTlME'



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

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

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

你看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:35:18 | 显示全部楼层
Type "copyright", "credits" or "license()" for more information.
>>> 
==================== RESTART: C:/Users/ASUS/Desktop/嗨.py ====================
输入0结束程序:
请输入需要翻译的内容:哈哈
翻译结果:Ha ha
请输入需要翻译的内容:我最帅
翻译结果:I am the most handsome
请输入需要翻译的内容:你最帅
翻译结果:You are the most handsome
请输入需要翻译的内容:
我运行没毛病欸
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-17 17:40:25 | 显示全部楼层
还是有问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

可能是我不够帅哈哈哈哈哈   哎,这随便哪里蹦出个小问题我就不会了
还是感谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 20:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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