有道翻译-爬虫

在我们进行爬虫操作的时候,网站为了防止自己的服务器不要那么被频繁访问或者保护自己的数据信息不被别人获取,通常会采用一系列的反爬虫的操作。
      1、验证UserAgent
      2、验证Cookie
      3、查看Referer跳转信息
      4、js提交信息加密

一、打开有道翻译,右键审查元素,并选择Netword
在这里插入图片描述
二、在有道网页中输入要翻译的内容,然后检查netword下面的每一条URL信息。我们会找到提交信息的URL。

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

该URL的请求内容如下:

Response Headers
Request URL:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
Request Method:POST
Status Code:200 OK
Remote Address:220.181.76.84:80
Referrer Policy:no-referrer-when-downgrade

Request Headers
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9
Connection:keep-alive
Content-Length:251
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:OUTFOX_SEARCH_USER_ID=-309913466@113.94.26.152; OUTFOX_SEARCH_USER_ID_NCOO=620396314.2138592; _ntes_nnid=918a7bef39e595b95828b86f71f865d9,1539393519413; P_INFO=hjh1343084642; JSESSIONID=aaafD5iFIPcLle1m-Iv4w; __guid=204659719.4275793267214428700.1572319520374.8025; monitor_count=4; ___rl__test__cookies=1572320930125
Host:fanyi.youdao.com
Origin:http://fanyi.youdao.com
Referer:http://fanyi.youdao.com/
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
X-Requested-With:XMLHttpRequest

Form Data
i:我们
from:AUTO
to:AUTO
smartresult:dict
client:fanyideskweb
salt:15723209301300
sign:518e51662cfef4b0bbea5b5f5b09ad21
ts:1572320930130
bv:bbb3ed55971873051bc2ff740579bb49
doctype:json
version:2.1
keyfrom:fanyi.web
action:FY_BY_REALTlME

我们可以看到URL是采用Post请求的,在请求的信息Form Data中,我么可以看到有很多请求参数,我们还不知道这些信息是怎么生成的,这个时候,我们可以将这些数据去查询它们的出处,通过查询sign,我们可以发现它出现在http://shared.ydstatic.com/fanyi/newweb/v1.0.20/scripts/newweb/fanyi.min.js
在这里插入图片描述
在这里插入图片描述
从内容上看,是采用MD5对数据进行加密的,i为salt,e为要翻译的内容。
salt是采用时间戳生成的,而ts则是salt少一位。sign则是MD5加密生成,其他的参数可以照写,因为它们一般是不变。
1、salt参数

def get_salt(self):
        return (int(time.time()*10000))

2、ts参数

ts=str(int(salt/10))

3、sign参数

def get_md5(self,v):
        md5=hashlib.md5()
        md5.update(v.encode('utf-8'))
        value=md5.hexdigest()
        
        return value
    def get_sign(self,key,salt):
        sign="fanyideskweb" + key+ str(salt) + "n%A-rKaT5fb[Gy?;N5@Tj"
        sign=self.get_md5(sign)
        #print(sign)
        return sign

三、完整代码
具体的参数我们已经全部获得

import time,requests
from urllib import parse
import re,urllib
import hashlib
#有道
class youdao(object):
    def get_salt(self):
        return (int(time.time()*10000))
    def get_md5(self,v):
        md5=hashlib.md5()
        md5.update(v.encode('utf-8'))
        value=md5.hexdigest()
        
        return value
    def get_sign(self,key,salt):
        sign="fanyideskweb" + key+ str(salt) + "n%A-rKaT5fb[Gy?;N5@Tj"
        sign=self.get_md5(sign)
        #print(sign)
        return sign

    def translates(self,key):
        salt=self.get_salt()
        url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
        headers={'Cookie': 'OUTFOX_SEARCH_USER_ID=-1834148294@10.169.0.83; JSESSIONID=aaavu7Re42fb883tdAqJw; OUTFOX_SEARCH_USER_ID_NCOO=172793743.55574614; ___rl__test__cookies='+str(int(salt/10)),
                 'Host': 'fanyi.youdao.com',
                 'Origin': 'http://fanyi.youdao.com',
                 'Referer': 'http://fanyi.youdao.com/',
                 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
                 }
        
        data={'i':key,
              'from': 'AUTO',
              'to': 'AUTO',
              'smartresult': 'dict',
              'client': 'fanyideskweb',
              'salt': salt,
              'sign': self.get_sign(key,str(salt)),
              'ts':str(int(salt/10)) ,
              'bv':'bbb3ed55971873051bc2ff740579bb49',
              'doctype': 'json',
              'version': '2.1',
              'keyfrom': 'fanyi.web',
              'action': 'FY_BY_REALTIME',
              'typoResult': 'false'
              }
        #data=parse.urlencode(data).encode()
        r=requests.post(url,headers=headers,data=data)
        text=r.json()["translateResult"][0][0]["tgt"]
        return text
print(youdao.translate("我们"));  

为防止网站进行反爬虫,我们可以在headers中加入一些字段。Python有提供对应的库,对于MD5加密技术可以自己去了解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值