鱼C论坛

 找回密码
 立即注册
查看: 27401|回复: 11

[已解决]第054讲:论一只爬虫的自我修养2:实战

[复制链接]
发表于 2020-12-13 18:24:20 | 显示全部楼层 |阅读模式

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

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

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

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

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

复制代码

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

  5. During handling of the above exception, another exception occurred:

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

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

为什莫俺找的有道翻译都翻译不了呀
谢谢大家了
最佳答案
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表示翻译成英文,待翻译的原文是小甲鱼

这是 fromdata

这是 fromdata

这是地址

这是地址
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-13 21:01:05 | 显示全部楼层

回帖奖励 +3 鱼币

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

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小伤口 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2020-12-13 22:29:04 | 显示全部楼层

回帖奖励 +3 鱼币

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

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

  5. #此处是使用Request方法时直接在里边加入headers参数
  6. '
  7. head = {}
  8. 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"
  9. '

  10. data ={}
  11. data["i"] ="I am  busing learn the language"
  12. data["from"] = "AUTO"
  13. data["to"] = "AUTO"
  14. data["smartresult"] = "dict"
  15. data["client"] = "fanyideskweb"
  16. data["salt"] = "1532682135404"
  17. data["sign"] = "76e5abce434c682300cb2d488bf326e8"
  18. data["doctype"] = "json"
  19. data["version"] = "2.1"
  20. data["keyfrom"] = "fanyi.web"
  21. data["action"] = "FY_BY_REALBUTTON"
  22. data["typoResult"] = "false"

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

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

  27. target = json.loads(html)
  28. print(target['translateResult'][0][0]['tgt'])
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小伤口 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

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

回帖奖励 +3 鱼币

学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-14 10:16:06 | 显示全部楼层

回帖奖励 +3 鱼币

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小伤口 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-14 10:19:12 | 显示全部楼层
本帖最后由 小伤口 于 2020-12-14 10:24 编辑
小小小菜菜菜 发表于 2020-12-13 22:29
按照下面加上个User-Agent信息看看


还是不行报错内容:需要一个整数(got类型字典)
我试试有道吧
但是俺的有道全是get类型欸
所以我想要一下你们的有道翻译网址
可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-14 10:19:50 | 显示全部楼层
本帖最后由 小伤口 于 2020-12-14 10:24 编辑
笨鸟学飞 发表于 2020-12-13 21:01
加个User-Agent伪装下浏览器标识试试看


还是不行报错内容:需要一个整数(got类型字典)
我试试有道吧
但是俺的有道全是get类型欸
所以我想要一下你们的有道翻译网址
可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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表示翻译成英文,待翻译的原文是小甲鱼

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小伤口 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-12-14 10:58:36 | 显示全部楼层
笨鸟学飞 发表于 2020-12-14 10:26
有道翻译url:http://fanyi.youdao.com/
有道是采用的post

(⊙o⊙)哦
涨知识了
所以用有道的方法就不行了两者翻译的方法不一样
对吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 11:23:43 | 显示全部楼层
老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编码过后的再编一次他的格式类型能正确么??
你把第16行data=urllib.parse.urlencode(data)注释掉再试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-14 11:24:20 | 显示全部楼层
老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编码过后的再编一次他的格式类型能正确么??
你把第16行 data=urllib.parse.urlencode(data) 注释掉再试试

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
小伤口 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-12-14 11:39:20 | 显示全部楼层
qq1151985918 发表于 2020-12-14 11:24
老板你没发现你代码有问题吗?你代码第16行和第14行,看看,
第14行已经把data编码过了,你第16行还要把编 ...

发现了,感谢感谢
现在行了
谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-30 09:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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