小伤口 发表于 2020-12-13 18:24:20

第054讲:论一只爬虫的自我修养2:实战

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

老版54讲甲鱼老师用python进行翻译
因为俺没找到有道在线翻译
所以我换成了百度翻译
import urllib.request
import urllib.parse
url='https://fanyi.baidu.com/v2transapi?from=zh&to=en'
data={}
data['from']= 'zh'
data['to']= 'en'
data['query']= '昨日大雪纷飞'
data['transtype']= 'realtime'
data['simple_means_flag']= '3'
data['sign']= '864819.643330'
data['token']= '8ae61c874326aaec6916ceab4c8bac3c'
data['domain']= 'common'

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


不过报错了{:10_266:}
Traceback (most recent call last):
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 858, in urlencode
    raise TypeError
TypeError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\ASUS\Desktop\搜狗翻译爬取.py", line 16, in <module>
    data=urllib.parse.urlencode(data)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 866, in urlencode
    "or mapping object").with_traceback(tb)
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python37\lib\urllib\parse.py", line 858, in urlencode
    raise TypeError
TypeError: not a valid non-string sequence or mapping object#不是有效的非字符串序列或映射对象

是我代码或方法的问题
还是网页不允许呀
能烦请各位帮俺解解惑吗{:10_266:}

为什莫俺找的有道翻译都翻译不了呀
谢谢大家了{:10_266:}

笨鸟学飞 发表于 2020-12-13 21:01:05

加个User-Agent伪装下浏览器标识试试看

小小小菜菜菜 发表于 2020-12-13 22:29:04

按照下面加上个User-Agent信息看看
import urllib.request
import urllib.parse
import json

url ="http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"

#此处是使用Request方法时直接在里边加入headers参数
'
head = {}
head["User-Agent"]= "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
'

data ={}
data["i"] ="I ambusing learn the language"
data["from"] = "AUTO"
data["to"] = "AUTO"
data["smartresult"] = "dict"
data["client"] = "fanyideskweb"
data["salt"] = "1532682135404"
data["sign"] = "76e5abce434c682300cb2d488bf326e8"
data["doctype"] = "json"
data["version"] = "2.1"
data["keyfrom"] = "fanyi.web"
data["action"] = "FY_BY_REALBUTTON"
data["typoResult"] = "false"

data = urllib.parse.urlencode(data).encode("utf-8")
req = urllib.request.Request(url,data,head)#使用Request方法在请求中加入headers参数先获得请求

response = urllib.request.urlopen(req)#在使用urlopen函数打开
html = reponse.read().decode("utf-8")#在windows上可以不用decode()解码

target = json.loads(html)
print(target['translateResult']['tgt'])

守望星星 发表于 2020-12-14 08:23:29

学习

qq1151985918 发表于 2020-12-14 10:16:06

{:10_256:}{:10_256:}

小伤口 发表于 2020-12-14 10:19:12

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

小小小菜菜菜 发表于 2020-12-13 22:29
按照下面加上个User-Agent信息看看

还是不行{:10_266:}报错内容:需要一个整数(got类型字典)
我试试有道吧
但是俺的有道全是get类型欸
所以我想要一下你们的有道翻译网址
可以吗{:10_266:}

小伤口 发表于 2020-12-14 10:19:50

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

笨鸟学飞 发表于 2020-12-13 21:01
加个User-Agent伪装下浏览器标识试试看

还是不行{:10_266:}报错内容:需要一个整数(got类型字典)
我试试有道吧
但是俺的有道全是get类型欸{:10_266:}
所以我想要一下你们的有道翻译网址
可以吗{:10_266:}

笨鸟学飞 发表于 2020-12-14 10:26:14

小伤口 发表于 2020-12-14 10:19
还是不行
我试试有道吧
但是俺的有道全是get类型欸


有道翻译url:http://fanyi.youdao.com/
有道是采用的post

百度不是啊,百度直接转换url就行了
例如百度翻译小甲鱼,直接访问url
https://fanyi.baidu.com/?aldtype=16047#zh/en/小甲鱼
这就清楚了吧,zh表示原文是中文,en表示翻译成英文,待翻译的原文是小甲鱼

小伤口 发表于 2020-12-14 10:58:36

笨鸟学飞 发表于 2020-12-14 10:26
有道翻译url:http://fanyi.youdao.com/
有道是采用的post



(⊙o⊙)哦
涨知识了
所以用有道的方法就不行了两者翻译的方法不一样
对吗{:10_257:}

qq1151985918 发表于 2020-12-14 11:23:43

老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编码过后的再编一次他的格式类型能正确么??
你把第16行data=urllib.parse.urlencode(data)注释掉再试试

qq1151985918 发表于 2020-12-14 11:24:20

老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编码过后的再编一次他的格式类型能正确么??
你把第16行 data=urllib.parse.urlencode(data) 注释掉再试试

小伤口 发表于 2020-12-14 11:39:20

qq1151985918 发表于 2020-12-14 11:24
老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编 ...

发现了,感谢感谢{:10_250:}
现在行了{:10_266:}
谢谢
页: [1]
查看完整版本: 第054讲:论一只爬虫的自我修养2:实战