python 爬取分页内容_利用python爬取百度翻译内容

利用python可以实现对百度翻译内容的爬取,具体过程如下:

前期工作

本程序的测试环境为python3.5,Chrome浏览器。进入百度翻译的页面,点开F12进入开发者调试工具,点击network,并清空所有的请求,方便判断点击“翻译”按钮后,会有哪些请求,上述过程如下图所示:

26bbaa6abce6fb38978f0c58b6e52ec8.png

在百度翻译中输入想要翻译的内容,并点击翻译,在network的请求框中可以看到如下一堆的请求:

d4851848008ee72c604debf802dd784a.png

从上到下依次点击,在Response中,如果发现翻译结果,说明这个就是执行翻译请求的URL。本人对应的request是第四个,即v2transapi,对应的Response为:

08a63e53f86ffd0372a617f4f9f0929c.png


因为本人执行的是英译汉,即最后输出的是中文,所以在上述翻译结果中,中文被转码为Unicode编码格式,不影响后续爬取结果,后台转码就可以了,后续会有相应介绍。

对应的Headers(请求头,部分)为:

a4f9011d42dedd4c7509280d7e32195a.png

对于上述请求头中的内容,对我们来说比较重要的有如下几个部分:

  • General:

5b2f5575bcbe5be11758a269660cc50b.png
  • Request Headers:

6d916b0f61e4ed055ae5ea9279e93b7f.png
  • Form Data:

dd6dc0604a41790cc5100644b73fda1d.png

Python程序

# coding=utf-8

import requests

url = "https://fanyi.baidu.com/v2transapi"
data = {
        "from": "en",
        "to": "zh",
        "query": "hello",
        "transtype": "translang",
        "simple_means_flag": "3",
        "token": "f8c8ea6c95d6e9e7ba318e136ee2c490",
        "sign": "54706.276099" # 随着翻译内容变化而变化
        }

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
    "Cookie": "BDUSS=I2N2tPRVBXZk5zQnZJdmV6QnY5ZDc1anNEU2lrcWVCN25lQ2t6bXJ2amd5a1JiQVFBQUFBJCQAAAAAAAAAAAEAAACiHXkweGllY2hlbmcxOTk1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOA9HVvgPR1bcT; BIDUPSID=FCDC0DE1E2A0BC542BE845EF57F0DA5F; PSTM=1560475969; BAIDUID=FCDC0DE1E2A0BC54F756173A5902B1FB:FG=1; locale=zh; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; to_lang_often=%5B%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%2C%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%5D; from_lang_often=%5B%7B%22value%22%3A%22en%22%2C%22text%22%3A%22%u82F1%u8BED%22%7D%2C%7B%22value%22%3A%22zh%22%2C%22text%22%3A%22%u4E2D%u6587%22%7D%5D; Hm_lvt_afd111fa62852d1f37001d1f980b6800=1561467752,1561468730,1561469040,1561469241; Hm_lpvt_afd111fa62852d1f37001d1f980b6800=1561469241; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1561468730,1561469040,1561469241,1561470454; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1561470454; yjs_js_security_passport=5453d43730575af39e7a665570b61ece7f5fc95b_1561470456_js"
}

response = requests.post(url, data=data, headers=headers)

print(response)
print(response.content.decode('unicode_escape')) # 中文转码

程序说明:

  • url为General中Request URL的地址;
  • data是将 Form Data中的内容写成字典的形式;
  • headers是请求头,从Request Headers中将"User-Agent"和"Cookie"提取出来;
  • response.content.decode(‘unicode_escape’):当相应结果中存在中文的时候,利用这种编码格式进行转码。

结果如下:

39de6278ee3547c3c4c69f0b88bbff90.png

注意

由于百度对外部爬虫的限制,在请求头当中,一定要把cookie带上,否则会出现error:997,没有翻译结果等类似的错误。另外data中内容一定要全,经笔者测试,改变翻译内容,data中的sign会发生变化,其他的如token(应该是加密用的),包括请求头中的cookie,user-agent在同一个浏览器下是不会改变的。sign的加入应该是百度为了防止外界直接对url进行请求,而不通过浏览器请求的一种限制吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值