项目案例实现|Python爬虫 02:破解百度翻译

  • 项目来源
  • 项目需求
  • 具体分析
    • 1. 指定URL
    • 2. UA伪装
    • 3. 发送请求
    • 4. 获取响应结果
    • 5. 持久化存储
    • 6. 个性化需求
  • 项目代码
  • 运行结果
  • 检验
  • 注意事项

项目来源

本项目来源B站UP主路飞学城视频:视频链接点这里

项目需求

利用Python爬虫实现百度翻译,获取单词词性以及释义

具体分析

1. 指定URL

首先进入百度翻译界面,随机输入一个单词后使用抓包工具,通过对所抓取的包的分析可知,翻译内容存储于一个ajax包sug中。

将该包中的URL粘贴到代码段,即获取了所需发送请求的URL地址

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

2. UA伪装

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}

3. 发送请求

根据抓包工具所示,该请求为一个post请求,与get请求不同,post请求必须传递参数。在本包中,参数即为所查单词,以’serendipity’为例。

发送请求,传入的参数封装在data字典中:

data = {'kw': serendipity}
response = requests.post(url=url, data=data, headers=headers)

4. 获取响应结果

在抓包工具中查看得知,所返回的响应数据是一串json串,故调用json方法即可获取。

dic_obj = response.json()

5. 持久化存储

对json格式的持久化存储,可导入json模块中的dump进行执行。

fp = open(filename, 'w', encoding='utf-8')
json.dump(dic_obj, fp=fp, ensure_ascii=False)  # ensure_ascii=False表示不使用ascii码

6. 个性化需求

以上只是对某个特定的单词进行查询,不能做到对任意单词进行模拟查询,要实现这一点,只需加上一个input(),将data字典中的value值改为input捕获到的值即可。

项目代码

# -*- coding: utf-8 -*-
# @author   : QIN
# @time     : 2021/1/10 16:24
# @function :
import requests
import jsonif __name__ == '__main__':# 指定URLpost_url = 'https://fanyi.baidu.com/sug'word = input('输入查询单词:')data = {'kw': word}# 进行UA伪装header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'}# 发送请求res = requests.post(url=post_url, data=data, headers=header)dic_obj = res.json()# 持久化保存filename = word + '.json'fp = open(filename, 'w', encoding='utf-8')json.dump(dic_obj, fp=fp, ensure_ascii=False)print('结果保存成功!')

运行结果

以单词’exotic’为例

输入查询单词:exotic
结果保存成功!

用json解析器对生成的json文件进行解析,得如下结果

{
“errno”: 0,
“data”: [{
“k”: “exotic”,
“v”: “adj. 异国的; 外来的; 异乎寻常的,奇异的; 吸引人的 n. 舶来品,外来物; 脱衣舞女”
}, {
“k”: “Exotic”,
“v”: “adj. 外来的,外国来的”
}, {
“k”: “exotica”,
“v”: “n. 异族事物,新奇事物; 尖蕊鸢尾”
}, {
“k”: “Exotica”,
“v”: “[电影]色情酒店”
}, {
“k”: “exotics”,
“v”: “外来植物”
}]
}

与百度翻译界面释义比对

基本释义正确,即项目完成!

检验

下面再次检测三个单词:

  • constraint
输入查询单词:constraint
结果保存成功!

{
“errno”: 0,
“data”: [{
“k”: “constraint”,
“v”: “n. 约束; 限制; 强制”
}, {
“k”: “constraints”,
“v”: “n. 约束; 限制; 强制( constraint的名词复数 )”
}]
}

  • paradise
输入查询单词:paradise
结果保存成功!

{
“errno”: 0,
“data”: [{
“k”: “paradise”,
“v”: “n. 天堂; 乐园; 伊甸园; 极乐”
}, {
“k”: “Paradise”,
“v”: “[地名] [圭亚那、美国、南非共和国、新西兰] 帕拉代斯; [电影]仙境”
}, {
“k”: “PARADISE”,
“v”: “abbr. phased array radar and diverse integrated se”
}, {
“k”: “paradises”,
“v”: “n. 天堂( paradise的名词复数 ); 伊甸园; 完美快乐的境界; 理想[完美]的地方”
}, {
“k”: “Paradise Lost”,
“v”: “n. <失乐园>; [电影]在记忆的森林里”
}]
}

  • infinite
输入查询单词:infinite
结果保存成功!

{
“errno”: 0,
“data”: [{
“k”: “infinite”,
“v”: “adj. 无限的,无穷的; 无数的,许许多多的; 极大的 n. 无限,无穷; [数] 无穷大; <宗”
}, {
“k”: “Infinite”,
“v”: “韩国7人偶像组合”
}, {
“k”: “infinitely”,
“v”: “adv. 极其; 无限地,无穷地”
}, {
“k”: “infinite form”,
“v”: “不定形式”
}, {
“k”: “infinite life”,
“v”: “无限寿命”
}]
}

注意事项

  • 发送的请求为一个post请求,需要携带参数,参数在抓包工具中获取,且需要封装在一个字典中
  • 要根据抓包工具确定响应数据的类型是text还是json,不同类型的持久化存储的方式不同

Python学习记录-项目案例实现:爬虫篇 02相关推荐

  1. Python学习记录-项目案例实现:爬虫篇 03

    项目案例实现|Python爬虫 03:爬取城市肯德基餐厅信息 项目来源 项目需求 具体分析 1. 指定URL 2. UA伪装 3. 发送请求 4. 获取响应结果 5. 持久化存储 6. 个性化需求 项 ...

  2. python学习记录——容器篇

    容器 字符串 下标(索引) # 下表也称为是索引,是一个整型数字,可以是正数,也可以是负数 # 正数下标是从0开始的,表示第一个字符,-1表示最后一个字符 my_str = 'hello'h e l ...

  3. python学习(三)scrapy爬虫框架(二)——创建一个scrapy爬虫

    在创建新的scrapy爬虫之前,我们需要先了解一下创建一个scrapy爬虫的基本步骤 第一步:确定要爬取的数据 以爬取豆瓣电影数据为例: 每部电影所要爬取的信息有: 片名:<头号玩家> 导 ...

  4. 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计

    <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...

  5. 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)

    目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...

  6. Python学习记录day6-反射、常用模块

    Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...

  7. python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...

    小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...

  8. Python学习记录day3

    2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...

  9. 【Python学习记录】Numpy广播机制(broadcast)

    ✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Python学习记录 文章目录 一.什么是Numpy广播机制 二.Numpy广播应用 三.Numpy广播规则 一.什么是Numpy广播机制 在Numpy. ...

最新文章

  1. 第4章 DHCP服务
  2. python的工作方向-Python的就业的方向和前景
  3. Win8.1 查看 “Windows 体验指数“
  4. swt 键盘事件ctrl+c_跑Python的键盘可以很强大
  5. 数据库基础系列之一:MySQL账户
  6. 如何不用更改底层来实现Dao多样化
  7. go 语言随机数的生成
  8. win10平板模式_电脑也能当平板用?并可以轻松实现分屏
  9. 解决sql server安装挂起
  10. 全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等
  11. android ding铃声,Ring a Ding Dong
  12. 学习arduino esp32相关例程(1)深度睡眠与唤醒
  13. 【考研经验】中国科学技术大学软件学院考研经历及复试回忆
  14. docmd怎么读_欧路词典|英汉-汉英词典 access是什么意思_access的中文解释和发音_access的翻译_access怎么读...
  15. 4核处理器_【装机帮扶站】第489期:盘点一波100元以下的4核/6核/8核/10核/12核处理器(2)...
  16. mysql中depart_数据库问题:提问:MYSQL 建立外键出现1064错误,建立外键的时候员工表的depart和部门表的depart连接失败...
  17. mysql version pom_Maven的pom文件里,类似于这种版本号${spring.version} 是什么意思?...
  18. 【1155平台】功能对比/提升
  19. HDU OJ ACM Steps 上的题目详细介绍
  20. 虹科方案| 助力高性能视频存储解决方案-1

热门文章

  1. [论文翻译]Deep Learning 翻译及阅读笔记
  2. NS2网络仿真的过程
  3. android 开发刷rom,Android ROM开发(7) TF卡(金卡)自引导刷机
  4. 如何修改tomcat默认的8080端口号
  5. Simulink学习之Combinatorial Logic模块
  6. leetcode 1103分糖果II
  7. ubuntu下各服务 重启命令
  8. 电脑c盘变红满了的清理方法
  9. 开源3D激光SLAM项目BLAM
  10. C# Development 13 Things Every C# Developer Should Know--C#开发人员应该知道的13件事情