爬取必应翻译

踩点

首先进入网站 https://cn.bing.com/translator/

在这里插入图片描述

很简约的一个网站,老样子,我们首先按F12,进入network,筛选xhr

在这里插入图片描述

我们蹲到了一个post请求 https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1
看一下参数

在这里插入图片描述

  • 震惊!居然没有会变的参数。

代码

在这里插入图片描述

  • 同样的我们先去找一下请求头
import requests
import re

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
    'referer': 'https://cn.bing.com/translator/',
    'origin': 'https://cn.bing.com',
    'cookie': 'MUID=096F420F0C72689723B74D660D0869AB; MUIDB=096F420F0C72689723B74D660D0869AB; _EDGE_V=1; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=4AA515596EB74801BC2212A2B99B705B&dmnchg=1; _SS=SID=118F574600DF62242683583D01F163BB; _TTSS_OUT=hist=WyJhZiIsImVuIl0=; _tarLang=default=en; btstkn=Ri2Gozn6GnnrscD5AGT0ykm4grRxenOXfloAsZnH9PucxJzHT%252Fwai5ui8TOq0QIK; _TTSS_IN=hist=WyJlbiIsImFmIiwiemgtSGFucyIsImF1dG8tZGV0ZWN0Il0=; SNRHOP=I=&TS=; SRCHUSR=DOB=20201106&T=1604735730000; _EDGE_S=F=1&SID=0F0E55C7A96F6A3314845ABCA82C6B51; SRCHHPGUSR=HV=1604735900&WTS=63740332530',
}

url = 'https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1'

trans = input("请输入待翻译文本:")
data = {
    'fromLang': 'auto-detect',
    'text': '%s'%trans,
    'to': 'en'
}
res = requests.post(url,headers=headers,data=data)
print(res.text)

  • 运行结果:

在这里插入图片描述

  • 使用正则提取结果:
result = re.search('"text":"(.*?)"',res.text).group(1)
print(result)
  • 添加一个循环:
while 1:
    trans = input("请输入待翻译文本:")
    if trans == '-1':
        break
    data = {
        'fromLang': 'auto-detect',
        'text': '%s'%trans,
        'to': 'en'
    }

    res = requests.post(url,headers=headers,data=data)
    result = re.search('"text":"(.*?)"',res.text).group(1)
    print(result)
  • 再次运行:

在这里插入图片描述

  • 非常棒

一点小探索

https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.1

  • 注意到这个请求url后面的参数,疑似加密的
  • 我们换一个翻译文本

在这里插入图片描述

  • 发现请求url变成了:https://cn.bing.com/ttranslatev3?isVertical=1&&IG=25FEE7A7C7C14533BBFD66AC5125C49E&IID=translator.5025.3
  • 再换一个试试

在这里插入图片描述

  • 放一起比较一下:

在这里插入图片描述

  • 发现第一次的IID是5025.1,第二次翻译变成了5025.3,第三次变成了5025.5,可以看出来这个参数是一个计数器,每次翻译加2
  • 而这三次,前面的IG参数都没有发生变化,我们刷新网页试试

在这里插入图片描述

  • 发现IG参数变了,IID参数重置了!
  • 我们再次对比一下:

在这里插入图片描述

  • 看来每次刷新后IG参数会改变,而IID参数重置,只有刷新后才会改变,那么我们推测 IG 参数在网页加载的时候,就唯一确定了。
  • 我们过去搜一下

在这里插入图片描述

  • 果然!!刷新一下试试

在这里插入图片描述

  • 发现这个 IG 参数又发生了变化,这也证明了猜测

更好的代码

  • 对上面的小探索进行总结,写出一份更好的代码
import requests
import re

# 每次请求 url 的时候,获取一下 IG 参数
# 整个请求,IG参数不会再发生变化
def getIG():
    header = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36'}
    response = requests.get('https://cn.bing.com/translator/',headers=header)
    ig = re.search(',IG:"(.*?)",',response.text)
    return ig.group(1)


headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',
    'referer': 'https://cn.bing.com/translator/',
    'origin': 'https://cn.bing.com',
    'cookie': 'MUID=096F420F0C72689723B74D660D0869AB; MUIDB=096F420F0C72689723B74D660D0869AB; _EDGE_V=1; SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=4AA515596EB74801BC2212A2B99B705B&dmnchg=1; _SS=SID=118F574600DF62242683583D01F163BB; _TTSS_OUT=hist=WyJhZiIsImVuIl0=; _tarLang=default=en; btstkn=Ri2Gozn6GnnrscD5AGT0ykm4grRxenOXfloAsZnH9PucxJzHT%252Fwai5ui8TOq0QIK; _TTSS_IN=hist=WyJlbiIsImFmIiwiemgtSGFucyIsImF1dG8tZGV0ZWN0Il0=; SNRHOP=I=&TS=; SRCHUSR=DOB=20201106&T=1604735730000; _EDGE_S=F=1&SID=0F0E55C7A96F6A3314845ABCA82C6B51; SRCHHPGUSR=HV=1604735900&WTS=63740332530',
}

ig = getIG()

# 添加一下计数器,及IID的计数
count = 1

while 1:
    trans = input("请输入待翻译文本:")
    if trans == '-1':
        break
    data = {
        'fromLang': 'auto-detect',
        'text': '%s'%trans,
        'to': 'en'
    }
    # 每次获取翻译内容,IG参数不变,IID参数每次查询后加2
    url = 'https://cn.bing.com/ttranslatev3?isVertical=1&&IG=%s&IID=translator.5025.%d'%(ig,count)
    res = requests.post(url,headers=headers,data=data)
    result = re.search('"text":"(.*?)"',res.text).group(1)
    print(result)
    count = count + 2
  • 运行效果

在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值