allearn_Python 发表于 2020-12-17 14:26:49

小甲鱼爬虫课程 - 爬虫访问在线翻译

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

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



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


↑↑ 显示翻译没问题



↑↑ 这是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)


但运行结果是:



请问该怎么改正{:10_297:}

小伤口 发表于 2020-12-17 14:29:35

本帖最后由 小伤口 于 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)

allearn_Python 发表于 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'] 里面给定值得话,一直就是这个值了

小伤口 发表于 2020-12-17 14:38:01

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

你可以先设置一个a放在data['translation'] = a
上面再用a=input(‘.....’)(当然其他字母也可以)
这样就可以实现了

小伤口 发表于 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']["tgt"]))
      


可以参考一下我这个{:10_297:}
有帮助的话希望给个最佳{:10_297:}

allearn_Python 发表于 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} 这样的错误

allearn_Python 发表于 2020-12-17 14:52:07

小伤口 发表于 2020-12-17 14:39
可以参考一下我这个
有帮助的话希望给个最佳

感谢{:10_297:}
我参考一下看我错在了哪里[捂脸]

小伤口 发表于 2020-12-17 15:09:57

allearn_Python 发表于 2020-12-17 14:49
这个不对。
我的代码里面是:
content = input('请输入要翻译的内容:')


我发现了{:10_250:}
嗯,,,,,,我举得最好的办法就是换个翻译网站?{:10_250:}

allearn_Python 发表于 2020-12-17 15:29:46

小伤口 发表于 2020-12-17 15:09
我发现了
嗯,,,,,,我举得最好的办法就是换个翻译网站?

{:5_109:} bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢

小伤口 发表于 2020-12-17 15:36:52

allearn_Python 发表于 2020-12-17 15:29
bing的翻译好像有点复杂,还是有道的好理解哈哈哈哈,感谢

我刚刚去试了一下bing,我也不会{:10_250:}

小伤口 发表于 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模块你可以先安装试试参考一下

allearn_Python 发表于 2020-12-17 16:22:36

小伤口 发表于 2020-12-17 15:48
这是我网上找的代码不过是用requests模块你可以先安装试试参考一下

{:10_297:}好的,谢谢谢谢

allearn_Python 发表于 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)

你给的参考程序刚开始运行还一切正常,后来再运行出现这个错误,请问能解决吗{:10_285:}

小伤口 发表于 2020-12-17 17:19:04

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

allearn_Python 发表于 2020-12-17 17:08
你给的参考程序刚开始运行还一切正常,后来再运行出现这个错误,请问能解决吗

应该是偶然错误吧,一直都出现这个问题吗
毕竟不是每次都能成功的

allearn_Python 发表于 2020-12-17 17:23:06

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

现在一直出现这个错误{:10_266:}

小伤口 发表于 2020-12-17 17:25:00

allearn_Python 发表于 2020-12-17 17:23
现在一直出现这个错误

发一下你保存我的代码我看一看吧{:10_250:}

allearn_Python 发表于 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']["tgt"]))
      



你看一下

小伤口 发表于 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
请输入需要翻译的内容:
我运行没毛病欸{:10_250:}

小伤口 发表于 2020-12-17 17:40:25

还是有问题吗{:10_266:}

allearn_Python 发表于 2020-12-17 17:41:22

小伤口 发表于 2020-12-17 17:35
我运行没毛病欸

Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) 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)
>>>

{:10_285:}可能是我不够帅哈哈哈哈哈   哎,这随便哪里蹦出个小问题我就不会了
还是感谢你
页: [1] 2
查看完整版本: 小甲鱼爬虫课程 - 爬虫访问在线翻译