鱼C论坛

 找回密码
 立即注册
查看: 3173|回复: 5

Python初级里爬虫54课,我现在显示的form data 跟小甲鱼视频中的不一样

[复制链接]
发表于 2017-5-22 09:52:14 | 显示全部楼层 |阅读模式

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

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

x
form data,我网页显示的是这样的:
i:I love fishC.com
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:1495414993569
sign:cec1f76599a33d693159d4eea580fc05
doctype:json
version:2.1
keyfrom:fanyi.web
action:FY_BY_ENTER
typoResult:true

我按照我这个编码,但是出来的结果却是{"errorCode":50}
我的编码如下:
import urllib.request
import urllib.parse
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=dict2.index'
data = {}

data['i'] = 'I love fishC.com'
data['from'] = 'AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1495414993569'
data['sign']='cec1f76599a33d693159d4eea580fc05'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_ENTER'
data['typoResult']='true'

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

resps = urllib.request.urlopen(url, data)

htm = resps.read().decode('utf-8')

print(htm)
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-22 11:50:25 | 显示全部楼层
和你一样的报错  表示很难受 好不容易学到爬虫  却一点东西也爬虫不到,照着敲 也不行   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-22 12:47:32 | 显示全部楼层
请叫我英雄- 发表于 2017-5-22 11:50
和你一样的报错  表示很难受 好不容易学到爬虫  却一点东西也爬虫不到,照着敲 也不行

是啊,这个问题我在研究
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-22 15:02:08 | 显示全部楼层
楼主,其实有时候课堂那个东西,要配合实际的.
爬虫重点就是要先观测网页.
有道那个Post的网址,你用chrome浏览器右键检查看看就知道问题所在了
http://fanyi.youdao.com/translat ... mp;sessionFrom=null
然后再看看from data,顺着鱼c的思路,很自然就会把东西写出来.
照抄未必一定行,因为网站随时都在变化,视频不是最新的.



我也是刚学
54那个习题
哦 是 登陆豆瓣那题..
那题我自己也研究了很久,第一次摸爬虫嘛.

登陆问题卡壳的话,多看看帮助文档.
最好就是有个浏览器,装个脚本能改UA的.
或者chrome最新版.
把浏览器UA改成爬虫的BOT,去用眼观测网页的变化,

因为鱼C那个课后集体并没有叫我们改UA.而你可以通过观测发现默认UA的话 几乎100% 会出现验证码.

猫猫图片那题就算了吧,其实思路就是个下载图片,蛮简单的,现在那个猫猫网也有点毛病.

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

使用道具 举报

发表于 2017-5-22 15:54:10 | 显示全部楼层
首先你的代码有错误:

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

resps = urllib.request.urlopen(url, data)#urlopen(url,d)
你修改一下看看对不对
import urllib.request
import urllib.parse
url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule&sessionFrom=https://www.baidu.com/link'
data = {}

data['i'] = 'i love fishc'
data['from'] = 'AUTO'
data['to']='AUTO'
data['smartresult']='dict'
data['client']='fanyideskweb'
data['salt']='1495439037320'
data['sign']='6b451627d806240b4bb8386529f39d8a'
data['doctype']='json'
data['version']='2.1'
data['keyfrom']='fanyi.web'
data['action']='FY_BY_CLICKBUTTON'
data['typoResult']='true'

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

resps = urllib.request.urlopen(url, d)

htm = resps.read().decode('utf-8')

print(htm)

这是我写的有道翻译的代码,和你不同的地方是:url 和 from data中的salt and sign and action
运行结果:{"translateResult":[[{"tgt":"我爱fishc","src":"i love fishc"}]],"errorCode":0,"type":"en2zh-CHS"}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-22 16:51:39 | 显示全部楼层
本帖最后由 dori233 于 2017-5-22 16:54 编辑

编辑一下,刚搜索了论坛,找到了答案了.
http://bbs.fishc.com/thread-86581-1-1.html

----之前的个人分析...............
我刚刚试了一下...挺有趣的.

想要获得面页响应,你必须把data里的东西全部照抄
对,全部.

分析:
关键在于,有道的网页请求发生变化了..
楼上的例子,如果是搜索 i love fishc
返回的结果是正常的.


但是,当你搜索其他东西,那么面页就又错误了.
就是改变 data里''i''的值.

即便是搜索同一样的东西.
sign的值也是一直在改变的.

经过观测.问题的关键在于
data['salt']='1495439037320'
data['sign']='6b451627d806240b4bb8386529f39d8a'
请求的DATA的这个值..
salt 观测了一下,是一个时间戳,用time.time()可以搞掂.
sign 好像是一个16位的值,10位转码返回的结果是一个十分精确的秒数??
这个值不知道是什么.服务器响应时间? 反正重点应该是这个sign
关键是这个值搞不定...

忽略这两个值 获取不到网页,
加上cookie跟harders

LZ可以另外试试百度翻译的,直接API搞起,比有道简单.


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-8 04:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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