python爬虫,处理POST请求

我们在python爬虫写脚本时,往往会遇到些问题,小编前几天也遇到了个小问题。在这里想跟大家分享下,以免大家走更多的弯路
列如我要去有道翻译,去爬取我们自己所翻译的东西。

import urllib.request
import urllib.parse

url='http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"}
formdata={
"i":" 加油",
"from":" AUTO",
"to": "AUTO",
"smartresult":"dict",
"client": "fanyideskweb",
"salt":" 15687710834733",
"sign": "d0b955f562cc4dfa3d33448f438b09b1",
"ts": "1568771083473",
"bv": "53850875da92527c18a78e804f4c65b4",
"doctype":"json",
"version":" 2.1",
"keyfrom": "fanyi.web",
"action":" FY_BY_CLICKBUTTION",
"typoResult": "true"}
data=bytes(urllib.parse.urlencode(formdata).encode('utf-8'))
request=urllib.request.Request(url,data=data,headers=headers)
response=urllib.request.urlopen(request)
print(response.read().decode('utf-8'))

脚本其实大家都会,但是随着脚本和反爬虫的机制也在更新。
问题1,大家写完脚本会出现{"errorCode":50}这样的错误。原因是我们给的Request URL: http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
只需要将改成Request URL: http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule即可解决
问题2,有的同学看质料上写,会出现以下类似问题。
在这里插入图片描述
其实,你写的代码根本就没有这么多,但它给我报错以下多少多少行出错。这个问题大多数都是那个地方少标识符
还是以上题为列

headers={"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"}

改成

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36"}

如果你用Chrome浏览器,点击右键“检查", 再点击"network", 你就会发现真正处理翻译并返回翻译结果的url是http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule。你还会了解发送请求的方式是POST,返回的相应数据是JSON格式。如果请求方式是POST,我们一定还要了解POST什么数据,服务器才会返回正确的响应(Response)。
如果你继续下拉Headers页面,你就会发现需要POST的数据Form Data里不仅包含了我们需要翻译的词(i), 还包括其它加密用的salt和签名字符串sign。我们在请求里必需把这些data加进去,有道才会返回翻译结果。这就是明显的反爬机制啊。当然高人无处不在,弄清了salt和sign的生成原理,就可以轻易破解有道的反爬机制了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值