三:爬虫-网络请求模块(下)

三:网络请求模块(下)

1.Requests模块:

Requests是用Python语言编写,基于urllib,采用 Apache2 Licensed开源协议的 HTTP 库,它比urllib更加的方便,可以节约我们大量的工作,完全满足 HTTP 测试需求

Requests的哲学是以 PEP 20(一种标准规范)的习语为中心开发的,所以它比urllib更加简洁

(1)Requests模块的安装:

Requests是Python语言的第三方库,专门用于发送HTTP请求

安装方式:

#1.在终端输入
pip install requests
#2.换源安装:若出现下载超时,过慢的情况,换源即可

# 示例
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple/

# 阿里云 http://mirrors.aliyun.com/pypi/simple/
# 豆瓣http://pypi.douban.com/simple/
# 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
# 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
# 华中科技大学http://pypi.hustunique.com/

(2)Requests的使用:

1.常用方法:

requests.get("网址")

request.post("网址")

2.常用参数:

urlurl地址,接口文档标注的接口请求地址

params:请求数据中的链接,常见的一个get请求,请求参数都是在url地址中

data:请求数据,参数是表单的数据格式

json:接口常见的数据请求格式

headers:请求头信息

cookie:保存的用户登录信息,比如做一些充值功能,但是需要用户已经登录,需要cookie信息的请求信息传输

#推荐一个爬虫工具:爬虫工具库
# https://spidertools.cn/#/curl2Request

3.响应内容:

r.encoding:获取当前的编码

r.encoding = 'charset':设置编码格式,多为'utf-8'编码

r.text:以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字体编码进行解码

r.cookies:返回cookie

r.headers:请求头,以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None

r.status_code:响应状态码

r.json()Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛出异常

r.content:字节流,以字节形式(二进制)返回,字节方式的响应体,会自动为你解码gzipdeflate压缩

4.Requestsget请求之参数应用 – 搜狗搜索海贼王案例:

(1)把参数添加到url链接中 – 平民写法(用到的最多的写法)

#导入模块
import requests

#目标url
url = 'https://www.sogou.com/web?query=%E6%B5%B7%E8%B4%BC%E7%8E%8B&_asf=www.sogou.com&_ast=&w=01015002&p=40040108&ie=utf8&from=index-nologin&s_from=index&oq=&ri=0&sourceid=sugg&suguuid=&sut=0&sst0=1678439364372&lkt=0%2C0%2C0&sugsuv=1666847250696567&sugtime=1678439364372'

#请求头部信息
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36",
    'Cookie':'ABTEST=8|1701776265|v17; SNUID=7B0346FA646568A5CDB26F5B64A6691E; IPLOC=CN3205; SUID=186722991B5B8C0A00000000656F0B89; cuid=AAFqAmPwSAAAAAqMFCnulgEASQU=; SUV=1701776266958330; browerV=3; osV=1; sst0=372'

}

#发起请求
response = requests.get(url, headers=headers)

#指定编码格式
response.encoding = 'utf-8'

#获取响应
html = response.text

#文件写入响应数据内容
with open("海贼王1.html","w",encoding='utf-8') as i:
    i.write(html)

#打印响应(数据)内容
print(html)

注意: 1.值与值之间需要用逗号隔开

(2)把参数添加到params中 – 官方写法(不常用)

#导入模块
import requests

#请求头部信息 -- 字典的形式
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    #cookie的两种设置方式
    #(1)'Cookie':'ABTEST=8|1701776265|v17; SNUID=7B0346FA646568A5CDB26F5B64A6691E; IPLOC=CN3205; SUID=186722991B5B8C0A00000000656F0B89; cuid=AAFqAmPwSAAAAAqMFCnulgEASQU=; SUV=1701776266958330; browerV=3; osV=1; sst0=372'
}

#cookie值 -- (2)字典的形式
cookies = {
    "ABTEST": "8^|1701776265^|v17",
    "SNUID": "7B0346FA646568A5CDB26F5B64A6691E",
    "IPLOC": "CN3205",
    "SUID": "186722991B5B8C0A00000000656F0B89",
    "cuid": "AAFqAmPwSAAAAAqMFCnulgEASQU=",
    "SUV": "1701776266958330",
    "browerV": "3",
    "osV": "1",
    "sst0": "372"
}

#目标url
url = "https://www.sogou.com/web"

#get请求所携带的参数
params = {
    "query": "海贼王",
    "_asf": "www.sogou.com",
    "_ast": "",
    "w": "01015002",
    "p": "40040108",
    "ie": "utf8",
    "from": "index-nologin",
    "s_from": "index",
    "oq": "",
    "ri": "0",
    "sourceid": "sugg",
    "suguuid": "",
    "sut": "0",
    "sst0": "1678439364372",
    "lkt": "0^%^2C0^%^2C0",
    "sugsuv": "1666847250696567",
    "sugtime": "1678439364372"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params) #因为cookie中不只有一个键值对所以要加s

print(response.text)
print(response)

#文件写入响应数据内容
with open("海贼王2.html","w",encoding='utf-8') as i:
    i.write(response.text)

官方写法快速的写法:

1.进入目标url的页面进行如下操作:

在这里插入图片描述

2.进入爬虫工具库进行如下操作:

在这里插入图片描述

3.得到如下代码:

import requests

headers = {
    "authority": "www.sogou.com",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
    "accept-language": "zh-CN,zh;q=0.9",
    "cache-control": "max-age=0",
    "sec-ch-ua": "^\\^Google",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "^\\^Windows^^",
    "sec-fetch-dest": "document",
    "sec-fetch-mode": "navigate",
    "sec-fetch-site": "none",
    "sec-fetch-user": "?1",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
cookies = {
    "ABTEST": "8^|1701776265^|v17",
    "SNUID": "7B0346FA646568A5CDB26F5B64A6691E",
    "IPLOC": "CN3205",
    "SUID": "186722991B5B8C0A00000000656F0B89",
    "cuid": "AAFqAmPwSAAAAAqMFCnulgEASQU=",
    "SUV": "1701776266958330",
    "browerV": "3",
    "osV": "1",
    "sst0": "372"
}
url = "https://www.sogou.com/web"
params = {
    "query": "^%^E6^%^B5^%^B7^%^E8^%^B4^%^BC^%^E7^%^8E^%^8B",
    "_asf": "www.sogou.com",
    "_ast": "",
    "w": "01015002",
    "p": "40040108",
    "ie": "utf8",
    "from": "index-nologin",
    "s_from": "index",
    "oq": "",
    "ri": "0",
    "sourceid": "sugg",
    "suguuid": "",
    "sut": "0",
    "sst0": "1678439364372",
    "lkt": "0^%^2C0^%^2C0",
    "sugsuv": "1666847250696567",
    "sugtime": "1678439364372"
}
response = requests.get(url, headers=headers, cookies=cookies, params=params)

print(response.text)
print(response)

注意: (1)官方写法不建议使用,因为它会把所有的参数都携带上,有些参数可能会有反爬

​ (2)params的数据类型为字典数据,必须满足键值对

5.如何快速将headers中的参数匹配为字典数据(了解):

#使用正则替换
1.将 headers 中的参数内容全部选中
2.按住 CTRL + R 键:会弹出一个提示框
3.在第一行输入正则语法:(.*):\s(.*)$
4.在第二行输入正则语法:"$1":"$2",
5.点击 regax
6.点击 Replace All

注意: 1.因为已经有爬虫工具库了,所以这个方法也就用不上了,大家当作拓展就好

​ 2.写的时候注意语法不要写错,特别是第二行的正则语法后面的英文逗号,一定要加

正则替换法的操作图示:

在这里插入图片描述
在这里插入图片描述

6.Requestspost请求:

post请求的大多数用法和get请求一样,只是需要加上data参数

post方法的使用场景:

​ 1.网页需要登录的情况下

​ 2.需要给网页传输内容的情况下

语法格式:

response = requests.post("网址", data = data,headers=headers)

360翻译 – 实现英汉互译示例:

#导入模块
import requests

#目标url
'''
url分析 -- 实现英文翻译成中文:
https://fanyi.so.com/index/search?eng=1&validate=&ignore_trans=0&query=love
https://fanyi.so.com/index/search?eng=1&validate=&ignore_trans=0&query=like
https://fanyi.so.com/index/search?eng=1&validate=&ignore_trans=0&query=enjoy
根据多个英文翻译的url分析,发现改变的只有单词不同,其余的内容完全一致,也就是说我们可以把最后面单词的位置设置成一个变量,这样的话就可以实现单词翻译,
而不是想翻译一个单词就去改变一下它的url
'''

'''
url分析 -- 实现中文翻译成英文:
https://fanyi.so.com/index/search?eng=0&validate=&ignore_trans=0&query=%E7%88%B1%E6%83%85
https://fanyi.so.com/index/search?eng=0&validate=&ignore_trans=0&query=%E5%96%9C%E6%AC%A2
https://fanyi.so.com/index/search?eng=0&validate=&ignore_trans=0&query=%E4%BA%AB%E5%8F%97
'''

'''
根据两种翻译的url分析,发现除结尾不同外其eng也不同,一个是0;一个是1
两种方法都实现的实现方法: 
第一个方法: if判断
第二个方法: 函数
'''

print("中文 --> 英文 ; 点击0")
print("英文 --> 中文 ; 点击1")
choose = input("请输入你的选择: ")
word = input("请输入你想翻译的内容: ")
url = f'https://fanyi.so.com/index/search?eng={choose}&validate=&ignore_trans=0&query={word}'


#请求头信息
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    'Pro':'fanyi'  # 查看后发现在这个参数中做了反爬,所以这个参数必须要加上
}

#post请求要携带的参数
data = {
    'eng': f'{choose}',  # 注意改变参数,因为url中的eng参数已经被我们设置成了choose变量
    'validate': "",
    'ignore_trans': '0',
    'query': f'{word}'  # 注意改变参数,因为url中的最后一项参数已经被我们设置成了word变量
}

#发起请求
response = requests.post(url,headers = headers,data = data)

'''
#检测可能出现的错误
print(response.text) #经过检测后发现没有报错,data不可能有问题,所以只能是在其它地方出现反爬
'''

'''
#获取响应数据
result = response.json() #报出 JSONDecodeError 错误,说明response并不能满足转换成json对象
print(result)
'''

'''
#获取响应数据
result = response.json()
print(result)
'''
#获取响应数据
result = response.json()

#信息过滤
fanyi = result['data']['fanyi'] #字典取值

'''
字典取值的两种方法:
    1.['key'] -- 取不到值会报错
    2.xxx.get('key') -- 取不到值会返回None
    
        注意:一旦取不到值对于第一种方法需要进行异常处理,而第二种方法则不用去管
'''
print(fanyi)

信息过滤图示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224964.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期末速成数据库极简版【查询】(2)

目录 select数据查询----表 【1】筛选列 【2】where简单查询 【3】top-n/distinct/排序的查询 【4】常用内置函数 常用日期函数 常用的字符串函数 【5】模糊查询 【6】表数据操作——增/删/改 插入 更新 删除 【7】数据汇总 聚合 分类 ​ 🙂&#…

OpenCV-python下载安装和基本操作

文章目录 一、实验目的二、实验内容三、实验过程OpenCV-python的安装与配置python下载和环境配置PIP镜像安装Numpy安装openCV-python检验opencv安装是否成功 openCV-python的基本操作图像输入和展示以及写出openCV界面编程单窗口显示多图片鼠标事件键盘事件滑动条事件 四、实验…

科研神器:Vscode + latex+grammarly+github copilot

科研论文编写神器:Vscode latex grammarly github copilot 相信很多科研人都有使用latex排版及撰写论文的需求,我一开始使用的是在线编辑的overleaf,overleaf的优点是省事便捷,不用配置,并且支持版本回溯&#xff…

一对一互相聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

换种方式开发软件

前 言 作为程序员,经常苦于项目交付,疲于应对各种需求,一路狂奔,很难有时间停下来思考与抽象,聊起来都是“累”;作为产品经理,最痛苦的莫过于梦醒之后无路可走,心里的苦只有自己知道…

【精】云HIS系统操作过程中常见问题及解决方法

云HIS系统使用和操作过程中常见问题及解决方法 1.门诊业务 (1)门诊医生如何查询往期病人? 答:点击门诊医生站左侧患者列表,在弹出的页面点击已诊分页,在搜索框输入患者姓名,在结果中找到对应…

【2021研电赛】基于EAIDK-310的云端互联无人驾驶系统

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 参赛单位:上海理工大学 参赛队伍:你说的都是对的 指导老师:蒋全 参赛队员:童锐,邹祖奇,胡涛 获奖情况&…

亚马逊云科技re:Invent大会:RAG技术赋能企业AI应用的新纪元

在最新一届re:Invent大会中,亚马逊云科技的数据和人工智能副总裁Swami Sivasubramanian博士提出了一系列AI产品,其中RAG技术成为了企业构建生成式AI应用的重要选择。这种技术的实质是将向量数据库与大语言模型相结合,赋予大模型记忆的能力&am…

【译】虚拟线程:绝对优势

原文地址:Virtual Threads: A Definite Advantage 一、前言 深入了解虚拟线程如何提高应用程序的性能和可扩展性,同时将线程管理开销降到最低。 探索虚拟线程是一件很棒的事情,它是 Java 的一项强大功能,有望彻底改变多线程应用…

【星戈瑞】Sulfo-CY3 DBCO荧光光谱特性之吸收、发射光谱

Sulfo-CY3 DBCO的荧光光谱特性通常涵盖了其吸收和发射光谱。这些光谱特性是研究该染料在生物分子标记和成像中的应用时的参数。 吸收光谱: Sulfo-CY3 DBCO的吸收光谱通常显示了其在不同波长下吸收光的能力。典型情况下,Sulfo-CY3 DBCO的吸收峰位于可见光…

单向通信----一对一聊天

package 一对一聊天; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import …

CRM客户关系管理系统的主要功能有哪些?

我们都知道,CRM系统可以帮助企业加快业务增长。如果一个企业能提高业务效率、跨团队协作、有效管理客户、轻松共享和同步数据,那么企业竞争力将极大地提高。基于此,我们说说CRM客户关系管理系统的主要功能分析。 完整的CRM是什么样的&#x…

HarmonyOS开发(十):通知

1、通知概述 1.1、简介 应用可以通过通知接口发送通知消息,终端用户可以通过通知栏查看通知内容,也可以点击通知来打开应用。 通知使用的的常见场景: 显示接收到的短消息、即使消息...显示应用推送消息显示当前正在进行的事件&#xff0c…

最常见的直流负载工作方式

直流负载工作方式是指在电力系统中,直流电源为负载提供电能的方式。在实际应用中,直流负载工作方式有很多种。 直接供电方式:这是最简单的直流负载工作方式,即直流电源直接为负载提供电能。这种方式适用于负载较小、对电源稳定性要…

【Vue第1章】Vue核心

目录 1.1 Vue简介 1.2 初识Vue 1.2.1 代码 1.3 模板语法 1.3.1 效果 1.3.2 模板的理解 1.3.3 插值语法 1.3.4 指令语法 1.3.5 代码 1.4 数据绑定 1.4.1 效果 1.4.2 单向数据绑定 1.4.3 双向数据绑定 1.4.4 代码 el与data的两种写法 代码 1.5 MVVM模型 1.5.1 …

Java基础-代码块及其细节

代码块概念: 注意调用时机 好处与使用场景 将构造器的冗余部分提取到代码块 每个构造器执行时都会先执行代码块 静态代码块与普通代码块的区别 注意:创建对象实例时,静态代码块只会被调用一次 例子 public Class DD{static{//打印"…

Qt开发学习笔记02

将窗口设为提示框 Qt::ToolTipQt 数据库连接池 #ifndef SQLITE_H #define SQLITE_H#include <QSqlDatabase> #include <QSqlError> #include <QSqlQuery> #include <QQueue> #include <QMutex> #include <QDebug> #include "../con…

翻译: 生成式人工智能的经济潜力 第一部分商业价值 The economic potential of generative AI

生成式人工智能即将引发下一波生产力的浪潮。我们首先看看业务价值可能会增加的地方&#xff0c;以及对劳动力的潜在影响。 1. 人工智能已经逐渐渗透到我们的生活中 人工智能已经逐渐渗透到我们的生活中&#xff0c;从为智能手机提供动力的技术到汽车上的自动驾驶功能&#x…

实现简易的多人聊天

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

SpringBoot Maven打包插件spring-boot-maven-plugin无法解析离谱原因记录

目录 一、常见打包插件无法解析原因二、打包插件无法解析离谱原因三、总结 打包配置 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><…