鱼C论坛

 找回密码
 立即注册
查看: 2411|回复: 14

[已解决]【求助】Python 爬虫/有道翻译的问题

[复制链接]
发表于 2020-2-5 15:01:38 | 显示全部楼层 |阅读模式

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

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

x
各位大佬,

我想问一下有关于0基础学Python 054 爬虫 实战的一个问题。
在课堂例子:使用Python模拟浏览器,使用在线有道词典进行翻译。
我自己跟着做了一遍,做到下面这一步:
import urllib.request
import urllib.parse

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
data = {}

data['i']= 'I love FishC.com'
data['from']= 'AUTO'
data['to'] ='AUTO'
data['smartresult']= 'dict'
data['client']='fanyideskweb'
data['salt']='15808812857901'
data['sign']= '41f9470664fe7d4a3b549a4aeceaaba5'
data['ts']= '1580881285790'
data['bv']= '901200199a98c590144a961dac532964'
data['doctype']= 'json'
data['version']= '2.1'
data['keyfrom']= 'fanyi.web'
data['action']= 'FY_BY_CLICKBUTTION'

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

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

print(html)

这时候我发现,如果我现在运行,Python直接给我一个: {"errorCode":50}
(正常情况下(在小甲鱼的演示中)应该返回一个包含 "我爱FishC.com" 的一个长字符串)

后来我似乎发现了原因,我直接把这个Request URL (就是上面代码中的URL) 直接在浏览器中打开,浏览器就会给我 {"errorCode":50}

请问这是为什么?怎么解决这个问题呢?

谢谢!

最佳答案
2020-2-5 15:55:17
链接里去掉"_o",代码如下:
  1. import urllib.request
  2. import urllib.parse

  3. url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
  4. data = {}

  5. data['i']= 'I love FishC.com'
  6. data['from']= 'AUTO'
  7. data['to'] ='AUTO'
  8. data['smartresult']= 'dict'
  9. data['client']='fanyideskweb'
  10. data['salt']='15808812857901'
  11. data['sign']= '41f9470664fe7d4a3b549a4aeceaaba5'
  12. data['ts']= '1580881285790'
  13. data['bv']= '901200199a98c590144a961dac532964'
  14. data['doctype']= 'json'
  15. data['version']= '2.1'
  16. data['keyfrom']= 'fanyi.web'
  17. data['action']= 'FY_BY_CLICKBUTTION'

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

  19. response = urllib.request.urlopen(url,data)
  20. html = response.read().decode('utf-8')

  21. print(html)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-5 15:55:17 | 显示全部楼层    本楼为最佳答案   
链接里去掉"_o",代码如下:
  1. import urllib.request
  2. import urllib.parse

  3. url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
  4. data = {}

  5. data['i']= 'I love FishC.com'
  6. data['from']= 'AUTO'
  7. data['to'] ='AUTO'
  8. data['smartresult']= 'dict'
  9. data['client']='fanyideskweb'
  10. data['salt']='15808812857901'
  11. data['sign']= '41f9470664fe7d4a3b549a4aeceaaba5'
  12. data['ts']= '1580881285790'
  13. data['bv']= '901200199a98c590144a961dac532964'
  14. data['doctype']= 'json'
  15. data['version']= '2.1'
  16. data['keyfrom']= 'fanyi.web'
  17. data['action']= 'FY_BY_CLICKBUTTION'

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

  19. response = urllib.request.urlopen(url,data)
  20. html = response.read().decode('utf-8')

  21. print(html)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:14:37 | 显示全部楼层
一个账号 发表于 2020-2-5 15:55
链接里去掉"_o",代码如下:

请问为什么去掉_o就不报错了?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:23:05 | 显示全部楼层
末影 发表于 2020-2-5 16:14
请问为什么去掉_o就不报错了?

网站设置了反爬虫机制。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2020-2-5 16:25:04 | 显示全部楼层
zltzlt 发表于 2020-2-5 16:23
网站设置了反爬虫机制。

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

使用道具 举报

发表于 2020-2-5 16:25:25 | 显示全部楼层
zltzlt 发表于 2020-2-5 16:23
网站设置了反爬虫机制。

上次也是你告诉我的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:25:38 | 显示全部楼层
一个账号 发表于 2020-2-5 16:25
上次也是你告诉我的

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

使用道具 举报

 楼主| 发表于 2020-2-5 16:39:53 | 显示全部楼层
一个账号 发表于 2020-2-5 15:55
链接里去掉"_o",代码如下:

这个厉害了。果然现在可以了。可以再问一下,是怎么确定要把 ”_o“去掉的呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:51:19 | 显示全部楼层
qingzk 发表于 2020-2-5 16:39
这个厉害了。果然现在可以了。可以再问一下,是怎么确定要把 ”_o“去掉的呢?

网站设置了反爬虫机制。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:51:47 | 显示全部楼层
@zltzlt 请删 2 楼,并回答 9 (9-1)楼。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 16:52:20 | 显示全部楼层
一个账号 发表于 2020-2-5 16:51
@zltzlt 请删 2 楼,并回答 9 (9-1)楼。

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

使用道具 举报

发表于 2020-2-5 16:58:03 | 显示全部楼层
zltzlt 发表于 2020-2-5 16:51
网站设置了反爬虫机制。

他说的是怎么确定
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 17:19:19 | 显示全部楼层
zltzlt 发表于 2020-2-5 17:01
因为网站设置了反爬虫机制,所以确定要把 _o 去掉,没毛病

谢谢回复。
我追加的问题的意思是:
1. 怎么看出来这是反爬虫机制的问题?是不是只要是反爬虫机制就会触发{"errorCode":50}?
2. 怎样知道解决办法是去掉一个"_o",而不是去掉或者添加点别的东西?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 17:20:50 | 显示全部楼层
qingzk 发表于 2020-2-5 17:19
谢谢回复。
我追加的问题的意思是:
1. 怎么看出来这是反爬虫机制的问题?是不是只要是反爬虫机制就会 ...

1. 因为网站识别出来你是爬虫才会触发 {"errorCode":50}。

2. 这是固定的,因为网站做了点手脚。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 18:14:34 | 显示全部楼层
zltzlt 发表于 2020-2-5 17:20
1. 因为网站识别出来你是爬虫才会触发 {"errorCode":50}。

2. 这是固定的,因为网站做了点手脚。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-4 02:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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