鱼C论坛

 找回密码
 立即注册
查看: 23198|回复: 61

[已解决]python爬虫代码问题

[复制链接]
发表于 2017-4-30 14:42:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 当回首遇上转身 于 2017-4-30 14:48 编辑

操作系统:Windows 7      Python版本 3.5.2
求解两行选定代码应该怎么修改?

"""
  1. import urllib.request
  2. import urllib.parse
  3. import json

  4. content = input("请输入需要翻译的内容:")

  5. url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null'
  6. data = {}
  7. # data['i'] = 'I love FishC.com'
  8. data['i'] = content
  9. data['from'] = 'AUTO'
  10. data['to'] = 'AUTO'
  11. data['smartresult'] ='dict'
  12. data['client'] = 'fanyideskweb'
  13. data['salt'] = '1493538230701'
  14. data['sign'] = '7b50be5ddda95bce3d4b7b9404647cec'
  15. data['doctype'] = 'json'
  16. data['version'] = '2.1'
  17. data['keyfrom'] = 'fanyi.web'
  18. data['action'] = 'FY_BY_CTRL_ENTER'
  19. data['typoResult'] = 'true'
  20. data = urllib.parse.urlencode(data).encode('utf-8')

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

  23. print(html)

  24. """
  25. target = json.loads(html)
  26. print("翻译结果:%s"%(target['translateResult'][0][0]['tgt']))
  27. """
复制代码


求解这两行代码如何修改?

  1. data['salt'] = '1493538230701'
  2. data['sign'] = '7b50be5ddda95bce3d4b7b9404647cec'
复制代码
最佳答案
2017-4-30 16:26:57
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647cec' 应该是根据时间戳+你要翻译的内容加密后生成的验证字段。
除非你知道网站的加密方法,不然基本上是破解不了的,所以你直接这样爬是爬不到的,只会返回给你一个错误代码。
解决办法有2个:
1. 同样是有道翻译,url和data用下面这个
  1.     url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'
  2.     data = {
  3.         "type" : "AUTO",
  4.         "i" : sentence,
  5.         "doctype" : "json",
  6.         "xmlVersion" : "1.8",
  7.         "keyfrom" : "fanyi.web",
  8.         "ue" : "UTF-8",
  9.         "action" : "FY_BY_CLICKBUTTON",
  10.         "typoResult" : "true"
  11.     }
复制代码

这个是不需要验证字段的,所以可以直接爬。

2.如果你一定要爬你这个页面的话,那就用selenium+phantomjs模拟浏览器,也是可以爬到的,但是速度会比较慢一些。
QQ图片20170430143955.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-30 16:26:57 | 显示全部楼层    本楼为最佳答案   
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647cec' 应该是根据时间戳+你要翻译的内容加密后生成的验证字段。
除非你知道网站的加密方法,不然基本上是破解不了的,所以你直接这样爬是爬不到的,只会返回给你一个错误代码。
解决办法有2个:
1. 同样是有道翻译,url和data用下面这个
  1.     url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'
  2.     data = {
  3.         "type" : "AUTO",
  4.         "i" : sentence,
  5.         "doctype" : "json",
  6.         "xmlVersion" : "1.8",
  7.         "keyfrom" : "fanyi.web",
  8.         "ue" : "UTF-8",
  9.         "action" : "FY_BY_CLICKBUTTON",
  10.         "typoResult" : "true"
  11.     }
复制代码

这个是不需要验证字段的,所以可以直接爬。

2.如果你一定要爬你这个页面的话,那就用selenium+phantomjs模拟浏览器,也是可以爬到的,但是速度会比较慢一些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 2

使用道具 举报

发表于 2017-4-30 16:31:52 | 显示全部楼层
我也碰到这个问题了前几天,应该是加密了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-30 16:51:05 | 显示全部楼层
jerryxjr1220 发表于 2017-4-30 16:26
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647c ...

谢谢大神解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-3 16:50:51 | 显示全部楼层
本帖最后由 春风过江南 于 2017-5-3 16:52 编辑
jerryxjr1220 发表于 2017-4-30 16:26
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647c ...


请问大神:
        我写的代码可以英文翻译为中文,但中文翻译英文就变成乱码了,这是怎么回事?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-3 17:48:06 From FishC Mobile | 显示全部楼层
春风过江南 发表于 2017-5-3 16:50
请问大神:
        我写的代码可以英文翻译为中文,但中文翻译英文就变成乱码了,这是怎么回事?

把你的代码和错误信息贴上来,不然怎么分析?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-4 09:17:42 | 显示全部楼层
春风过江南 发表于 2017-5-3 16:50
请问大神:
        我写的代码可以英文翻译为中文,但中文翻译英文就变成乱码了,这是怎么回事?

问题描述:
        我按照大神修改的data代码,重新运行了,英文可以翻译成中文,但中文翻译英文的时候报错了。
请大神帮帮我,谢谢!!!

代码和报错

代码和报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-4 14:28:33 | 显示全部楼层
jerryxjr1220 发表于 2017-5-3 17:48
把你的代码和错误信息贴上来,不然怎么分析?

不用麻烦大神了,我找到问题所在了。
我把{data['ue'] = 'UTF-8'}中的“UTF-8”横杠中间加空格了,导致中文文无法转换成英文。
谢谢大神关注!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2017-5-23 17:45:25 | 显示全部楼层
请问楼上大神,我的这个按照您说的改仍然报错和楼主一样,请问可以帮忙看一下吗?F:\daima.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 17:48:24 | 显示全部楼层
就是这个代码,第一次发图片不太会,不好意思

就是这个,第一次不会发图片不好意思

就是这个,第一次不会发图片不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 17:50:19 | 显示全部楼层
jerryxjr1220 发表于 2017-4-30 16:26
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647c ...

您好,我照您的改完仍然和楼主一样报错,可以帮忙看一下吗?
daima.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 17:51:15 | 显示全部楼层
AIR信 发表于 2017-5-23 17:50
您好,我照您的改完仍然和楼主一样报错,可以帮忙看一下吗?

是因为有道的后台支持又有什么其他改变吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-13 12:36:37 | 显示全部楼层
jerryxjr1220 发表于 2017-4-30 16:26
data['salt'] = '1493538230701'  这个应该是个时间戳,
data['sign'] = '7b50be5ddda95bce3d4b7b9404647c ...

你这个URL和data 是怎么来的 根据什么得到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-15 19:26:30 | 显示全部楼层
只要把07.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=null'中translate_o?后面的“_o”去掉就好了,其他比如时间戳什么的都不用改。其他的URL也是一样,去掉“_o”就好,无知小白纠结了一天摸索出的答案。
还有就是有人知道怎么获得最佳答案中提到的URL吗,我发现这个问题其实和data没有关系,都是URL的锅。

评分

参与人数 1鱼币 +1 收起 理由
木生子识时务 + 1

查看全部评分

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

使用道具 举报

发表于 2017-7-18 15:00:56 | 显示全部楼层
1304539791 发表于 2017-7-15 19:26
只要把07.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=nu ...

我也发现了。去掉_o 就可以了,小甲鱼老师视频讲解时候的URL有道是没有_o的,不知道是不是有道的一个模糊地址的方式,哪位大神可以解释一下吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 2017-7-20 00:09:18 | 显示全部楼层
可是你知道怎么获得最佳答案中提到的URL吗?我下了几个版本的Google浏览器,也不能得到视频中的URL。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-10 21:47:44 | 显示全部楼层
多谢大神们解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-17 07:52:03 | 显示全部楼层
真不错,去了url的_o解决问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 2

使用道具 举报

发表于 2017-9-1 22:49:06 | 显示全部楼层
没错,是url的锅,那么问题来了,最佳答案根据时间戳来生成验证码加密是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-3 00:54:29 | 显示全部楼层
1304539791 发表于 2017-7-15 19:26
只要把07.url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=nu ...

真的是这个问题。这么发现的?????为什么和_o有关系???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 10:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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