Python学习记录-项目案例实现:爬虫篇 02
项目案例实现|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相关推荐
- Python学习记录-项目案例实现:爬虫篇 03
项目案例实现|Python爬虫 03:爬取城市肯德基餐厅信息 项目来源 项目需求 具体分析 1. 指定URL 2. UA伪装 3. 发送请求 4. 获取响应结果 5. 持久化存储 6. 个性化需求 项 ...
- python学习记录——容器篇
容器 字符串 下标(索引) # 下表也称为是索引,是一个整型数字,可以是正数,也可以是负数 # 正数下标是从0开始的,表示第一个字符,-1表示最后一个字符 my_str = 'hello'h e l ...
- python学习(三)scrapy爬虫框架(二)——创建一个scrapy爬虫
在创建新的scrapy爬虫之前,我们需要先了解一下创建一个scrapy爬虫的基本步骤 第一步:确定要爬取的数据 以爬取豆瓣电影数据为例: 每部电影所要爬取的信息有: 片名:<头号玩家> 导 ...
- 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计
<Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...
- 《Python与硬件项目案例》— 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇)(期末大作业、课程设计、毕业设计、结课项目)
目录 <Python与硬件项目案例>- 基于Python与指纹模块AS608的指纹识别签到考勤系统(下篇) 概述 参考代码 <Python与硬件项目案例>- 基于Python与 ...
- Python学习记录day6-反射、常用模块
Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...
- python的scrapy爬虫模块间进行传参_小猪的Python学习之旅 —— 4.Scrapy爬虫框架初体验...
小猪的Python学习之旅 -- 4.Scrapy爬虫框架初体验 Python 引言: 经过前面两节的学习,我们学会了使用urllib去模拟请求,使用 Beautiful Soup和正则表达式来处理网 ...
- Python学习记录day3
2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...
- 【Python学习记录】Numpy广播机制(broadcast)
✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Python学习记录 文章目录 一.什么是Numpy广播机制 二.Numpy广播应用 三.Numpy广播规则 一.什么是Numpy广播机制 在Numpy. ...
最新文章
- 第4章 DHCP服务
- python的工作方向-Python的就业的方向和前景
- Win8.1 查看 “Windows 体验指数“
- swt 键盘事件ctrl+c_跑Python的键盘可以很强大
- 数据库基础系列之一:MySQL账户
- 如何不用更改底层来实现Dao多样化
- go 语言随机数的生成
- win10平板模式_电脑也能当平板用?并可以轻松实现分屏
- 解决sql server安装挂起
- 全球时区 简称 缩写 简介 PST EST GMT CST EDT UTC 等
- android ding铃声,Ring a Ding Dong
- 学习arduino esp32相关例程(1)深度睡眠与唤醒
- 【考研经验】中国科学技术大学软件学院考研经历及复试回忆
- docmd怎么读_欧路词典|英汉-汉英词典 access是什么意思_access的中文解释和发音_access的翻译_access怎么读...
- 4核处理器_【装机帮扶站】第489期:盘点一波100元以下的4核/6核/8核/10核/12核处理器(2)...
- mysql中depart_数据库问题:提问:MYSQL 建立外键出现1064错误,建立外键的时候员工表的depart和部门表的depart连接失败...
- mysql version pom_Maven的pom文件里,类似于这种版本号${spring.version} 是什么意思?...
- 【1155平台】功能对比/提升
- HDU OJ ACM Steps 上的题目详细介绍
- 虹科方案| 助力高性能视频存储解决方案-1
热门文章
- [论文翻译]Deep Learning 翻译及阅读笔记
- NS2网络仿真的过程
- android 开发刷rom,Android ROM开发(7) TF卡(金卡)自引导刷机
- 如何修改tomcat默认的8080端口号
- Simulink学习之Combinatorial Logic模块
- leetcode 1103分糖果II
- ubuntu下各服务 重启命令
- 电脑c盘变红满了的清理方法
- 开源3D激光SLAM项目BLAM
- C# Development 13 Things Every C# Developer Should Know--C#开发人员应该知道的13件事情