Python爬虫 —— 百度翻译

百度翻译

  • 基本信息
  • 网站基本信息

 
 
 
 
 
 
 
 

基本信息

爬虫测试时间:2020年7月29日

爬虫目标网站:百度翻译(https://fanyi.baidu.com/?aldtype=16047#auto/zh)

 
 
 
 

网站基本信息

Python爬虫 —— 百度翻译_第1张图片

键入要翻译的关键字后,页面局部刷新(依旧使用的是 AJAX)
Python爬虫 —— 百度翻译_第2张图片

1、数据抓包,进入XHR页面获取AJAX实际的请求地址及相关参数

Python爬虫 —— 百度翻译_第3张图片

2、看几个响应,分析请求的规律

Python爬虫 —— 百度翻译_第4张图片
Python爬虫 —— 百度翻译_第5张图片
找到k是china的那个请求,可以看到 请求url、请求方式 和 返回的数据类型 都有了
Python爬虫 —— 百度翻译_第6张图片

继续往下看,post传出的是什么样的数据。最下方可以看到传出数据的形式为 key —> kw, value —> china
Python爬虫 —— 百度翻译_第7张图片

3、编写个代码测试一下(此步可跳过,下面代码为不完全版本,只是为了引导思路)

import requests
from bs4 import BeautifulSoup
import os

baseurl = 'https://fanyi.baidu.com/sug'

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' \
     ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

para = {
     
    'query': 'python'
}

data = {
     
    'kw': 'dog'
}

res = requests.post(baseurl, headers={
     'User-Agent': ua}, data=data)


saveDir = './爬虫数据存储/百度翻译'
saveData = '百度翻译'
extName = 'json'

if res.status_code == 200:
    print(res.text)
    if not os.path.exists(saveDir):
        os.mkdir(saveDir)
    with open(os.path.join(saveDir, saveData + '.' + extName), 'w', encoding='utf-8') as f:
        f.write(res.text)

可以看到返回的数据如下:
Python爬虫 —— 百度翻译_第8张图片
上图中的 v 都是 \uxxx的形式,使用urllib解析字符,可以看到返回的结果就是翻译的结果

在这里插入图片描述

4、一个一个的解析这些字符也很麻烦,此处既然返回的直接试json数据,则调用 requests.json() 直接将响应的json字符串 读入为 python 字典,可以看到结果数据已经成功被解析了
Python爬虫 —— 百度翻译_第9张图片

5、整体代码如下:

import requests
from bs4 import BeautifulSoup
import os
import json

baseurl = 'https://fanyi.baidu.com/sug'

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' \
     ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

para = {
     
    'query': 'python'
}

data = {
     
    'kw': 'dog'
}

res = requests.post(baseurl, headers={
     'User-Agent': ua}, data=data)


saveDir = './爬虫数据存储/百度翻译'
saveData = '百度翻译'
extName = 'json'

if res.status_code == 200:
    print(res.text)
    if not os.path.exists(saveDir):
        os.mkdir(saveDir)
    with open(os.path.join(saveDir, saveData + '.' + extName), 'w', encoding='utf-8') as f:
        # 注意此处使用json.dumps() 一定要把属性 ensure_ascii 设置为 False,否则中文无法正常解码
        f.write(json.dumps(res.json(), ensure_ascii=False))

6、将上述代码按需封装,在辅以gui则可实现“自己的”翻译器了

你可能感兴趣的:(python,爬虫,python,爬虫)