Python爬虫——Requests

目录

简介

 基本使用​编辑

​编辑

安装

一个类型和六个属性

请求类型

GET

代码示例

POST

代码示例

代理

古诗文网绕过验证码登录

总结


简介

        Python的Requests库是一个用于发送HTTP请求的常用库。它提供了简单且人性化的API,使得发送HTTP请求变得非常容易。通过使用Requests库,我们可以发送GET、POST、PUT、DELETE等类型的请求,并且可以添加请求头、查询参数、请求体等。

以下是一个简单的使用Requests库发送GET请求的例子:

import requestsresponse = requests.get('https://www.example.com')
print(response.status_code)  # 打印响应状态码
print(response.text)  # 打印响应内容

        上述代码中,我们首先导入了Requests库,然后使用get()方法发送了一个GET请求,并将返回的Response对象赋值给变量response。我们可以通过status_code属性获取响应的状态码,通过text属性获取响应的内容。

另外,我们还可以添加请求头、查询参数、请求体等。下面是一个发送POST请求的例子:

import requestsheaders = {'User-Agent': 'Mozilla/5.0'}
data = {'username': 'admin', 'password': '123456'}
response = requests.post('https://www.example.com/login', headers=headers, data=data)
print(response.status_code)
print(response.text)

        上述代码中,我们首先定义了请求头headers和请求体data,然后使用post()方法发送了一个POST请求,并将headersdata作为参数传递给post()方法。

        总之,通过使用Requests库,我们可以轻松地进行HTTP请求,并且可以方便地获取响应的状态码、内容等。这使得编写爬虫程序变得更加简单和高效。


 基本使用

 

安装

使用下面的路径直接在清华源安装即可

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

一个类型和六个属性

Requests库提供了一些常用的属性,包括:

  1. status_code:响应的状态码,如200表示请求成功,404表示资源未找到等。
  2. text:响应的内容,以字符串形式返回。
  3. content:响应的内容,以二进制形式返回。
  4. headers:响应的头部信息,以字典形式返回。
  5. url:响应的URL地址。
  6. cookies:响应的Cookies,以字典形式返回。

        可以通过调用这些属性来获取请求的结果和相关信息。例如,可以使用response.status_code来获取响应的状态码,使用response.text来获取响应的内容。


代码示例

import requestsurl = 'http://www.baidu.com'response = requests.get(url=url)# 一个类型和六个属性
# Response类型
print(type(response))# 设置响应的编码格式
response.encoding = 'utf-8'# 以字符串的形式来返回网页的源码
print(response.text)# 返回响应的URL地址
print(response.url)# 返回二进制的数据
print(response.content)# 返回响应的状态码
print(response.status_code)# 返回响应头
print(response.headers)

请求类型

 Requests库中最常用的请求类型是GET和POST。

GET

        GET请求用于从指定的资源获取数据,一般用于获取数据或页面内容,不对服务器上的数据进行修改。GET请求的示例代码如下:

import requestsresponse = requests.get('https://www.example.com')

代码示例

# urllib
# (1)一个类型六个方法
# (2)get请求
# (3)post请求 百度翻译
# (4)ajax的get请求
# (5)ajax的post请求
# (6)cookie登录 微博
# (7)代理# requests
# (1)一个类型六个属性
# (2)get请求
# (3)post请求
# (4)代理
# (5)cookie  验证码import requestsurl = 'https://www.baidu.com/s'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}data = {'wd': '北京'
}
# url 请求资源路径
# params 参数
# kwargs 字典
response = requests.get(url=url, params=data, headers=headers)content = response.text
print(content)# 1.参数使用params传递
# 2.无需urlencode编码
# 3.无需请求对象的定制
# 4.url路径中的?想要就要

POST

        POST请求用于向服务器提交数据,一般用于提交表单或发送一些需要保密的数据。POST请求的示例代码如下:

import requestsdata = {'username': 'admin', 'password': '123456'}
response = requests.post('https://www.example.com/login', data=data)

代码示例

import requests
import jsonurl = 'https://fanyi.baidu.com/sug'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}data = {'kw': 'eye'
}# url请求地址
# data请求参数
# kwargs字典
response = requests.post(url=url, data=data, headers=headers)content = response.textobj = json.loads(content, encoding='utf-8')
print(obj)

(1)post请求不需要编解码

(2)请求参数是data

(3)不需要请求对象的定制


代理

直接上代码示例

import requests
import jsonurl = 'http://www.baidu.com/s?'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}data = {'wd': 'ip'
}proxy = {'http': '116.208.199.73:23807'
}response = requests.get(url=url, params=data, headers=headers, proxies=proxy)content = response.textwith open('daili3.html', 'w', encoding='utf-8') as fp:fp.write(content)

古诗文网绕过验证码登录

难点:

        (1)隐藏域问题

        (2)验证码

# 通过登录 进入主页面,需要绕过验证码# 通过登录接口发现登录时需要如下的参数
# __VIEWSTATE: fLLDQ+qS2n94TjNwP1zhJQBwhXiqyzi8V0pbqfZAfsxGqiNCSUtTNoXqWYeXANRB4Z7nNpdoIE9Xxtw0TBlpzT3yu2edZ2vkaK8jQC8jOEupsk2mqafq36q2p5jzGp9Uuh8tG/M1GKJN+l2miZdLYe5ZQ3k=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 你自己的账号
# pwd: 你自己的密码
# code: 验证码
# denglu: 登录# 观察到__VIEWSTATE和__VIEWSTATEGENERATOR和code是变量# 难点:(1)__VIEWSTATE和__VIEWSTATEGENERATOR 一般来说看不见的数据都在页面的源码之中
#  发现这两个数据在页面的源码之中,所以我们需要获取页面源码然后解析
#     (2) 验证码import requests
from bs4 import BeautifulSoup
import urllib.request# 登录页面的url
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}# 获取页面源码
response = requests.get(url=url, headers=headers)content = response.text# 解析页面源码,获取__VIEWSTATE和__VIEWSTATEGENERATOR
soup = BeautifulSoup(content, 'lxml')# 获取__VIEWSTATE
VIEWSTATE = soup.select('#__VIEWSTATE')[0].attrs.get('value')# 获取__VIEWSTATEGENERATOR
VIEWSTATEGENERATOR = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')# 获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
codeUrl = 'https://so.gushiwen.cn' + code# 获取了验证码的图片之后下载到本地然后观察验证码
# 然后在控制台来输入这个验证码,就可以将这个值给code的参数了
# 有坑
# 这里下载的时候是一个请求,下面要是再访问又是另一个请求验证码不一样
# urllib.request.urlretrieve(codeUrl, filename='code.jpg')# request中有一个方法叫做session
# 可以通过session的返回值,就能使请求变成一个对象
session = requests.session()
# 验证码的url
response_code = session.get(codeUrl)
# 注意现在不可以使用text,要使用二进制
# 因为我们要使用图片下载
content_code = response_code.content# wb将二进制写入到文件
with open('code.jpg', 'wb') as fp:fp.write(content_code)code_name = input('请输入你的验证码')# 登录
url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'data_post = {'__VIEWSTATE': VIEWSTATE,'__VIEWSTATEGENERATOR': VIEWSTATEGENERATOR,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': '你自己的账号','pwd': '你自己的密码','code': code_name,'denglu': '登录'
}
# 使用session前后的访问就是同一个请求了
response_post = session.post(url=url_post, headers=headers, data=data_post)content_post = response_post.textwith open('gsw.html', 'w', encoding='utf-8') as fp:fp.write(content_post)

然后打开html文件就登录成功了

        当然了,你也可以通过一些机器学习的方法来完成这么个获取验证码的操作,或者利用一些平台啊,例如什么超级鹰之类的使用他们的API来识别图片中的验证码这样就不需要自己识别了


总结

我以后总结

再见

ヾ( ̄▽ ̄)Bye~Bye~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美解决VMware中配置suse10虚拟机网络

一、注意!!!配置suse10网络,需要在虚拟机关机状态下进行,否则会配置不成功; 二、配置与主机在同一网段(仅主机模式,网卡一); 在suse系统关机状态下,Vmware中设置”虚拟网…

2024华为Android高级面试题及答案,android系统工程师面试

大厂offer是每个技术人的追求? 我觉得每一个程序员的梦想大概就是能够找一份大厂的 Offer,我觉得这很正常,这并不是我们的饭后谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/…

0.8秒一张图40hx矿卡stable diffusion webui 高质极速出图组合(24.3.3)

新消息是。经过三个月的等待,SD Webui (automatic1111)终于推出了新版本1.8.0,本次版本最大的更新,可能就是pytorch更新到2.1.2, 不过还是晚了pytorch 2.2.2版。 不过这版的一些更新,在forget分支上早就实现了,所以。…

2核4G云服务器就服阿里云,这性能无敌了

阿里云2核4G服务器多少钱一年?2核4G配置1个月多少钱?2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

一文了解74HCT14D的引脚图、符号、封装、数据手册及应用

74HCT14D 是一款采用硅栅 C2MOS 技术制造的高速 CMOS 施密特逆变器。它实现了类似于等效 LSTTL 的高速操作,同时保持 CMOS 的低功耗。该器件可用作电平转换器,用于将 TTL 或 NMOS 连接到高速 CMOS。 输入与 TTL、NMOS 和 CMOS 输出电压电平兼容。所有输入…

什么是工业级物联网智能网关?如何远程控制PLC?

在这个信息爆炸的时代,物联网技术已经逐渐渗透到我们生活的方方面面,而工业级物联网智能网关作为连接工业设备和云端的重要桥梁,更是引领着工业4.0时代的浪潮。那么,究竟什么是工业级物联网智能网关呢?今天&#xff0c…

Python网络请求高级篇:Requests库的深度运用

在Python网络请求中级篇中,我们了解了如何通过Requests库发送带参数的请求,处理Cookies,使用Session对象,以及设置请求头。在本文中,我们将进一步深入学习Requests库的高级功能,包括处理重定向,…

Codesys 位置式PID闭环控制系统(PID+PWM控制无刷电机)

有关Codesys位置式PID算法公式和源代码,请参考下面文章链接: 1、Codesys位置式PID https://rxxw-control.blog.csdn.net/article/details/131591254https://rxxw-control.blog.csdn.net/article/details/1315912542、博途PLC PWM输出控制 https://rxxw-control.blog.csdn.…

Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架,它提供了一个流式的数据处理 API,支持多种编程语言和运行时环境。Flink 的核心优点包括: 低延迟:Flink 可以在毫秒级的时间内处理数据,提供了低延迟的数据…

证件照制作繁琐?学会这三招轻松制作专业级证件照!

朋友们,您是否曾经为了办理各种证件、报名考试或者求职简历中的证件照而烦恼呢?是否希望能在家就能便捷高效地制作出符合规格的专业证件照?今天我将为大家推荐三款国内外备受好评的证件照处理工具,让您随时随地拥有完美证件照&…

【prompt四】Domain Prompt Learning for Efficiently Adapting CLIP to Unseen Domains

motivation 领域泛化(DG)是一个复杂的迁移学习问题,旨在学习未知领域的可泛化模型。最近的基础模型(FMs)对许多分布变化都具有鲁棒性,因此,应该从本质上提高DG的性能。在这项工作中,我们研究了采用视觉语言基础模型CLIP来解决图像分类中的DG问题的通用方法。虽然ERM使用标…

音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(Android)

本文主要讲解的是音频基础概念、交叉编译原理和实践(LAME的交叉编译),是基于Android平台,示例代码如下所示: AndroidAudioDemo 音频基础概念 在进行音频开发的之前,了解声学的基础还是很有必要的。 声音…

K线实战分析系列之二十二:圆形顶部和圆形底部形态

K线实战分析系列之二十二:圆形顶部和圆形底部形态 一、圆形顶部形态二、圆形顶部和圆形底部形态的总结 一、圆形顶部形态 市场多空一方被逐渐击退,跳空的缺口是一方突然发力,体现出一方对市场掌握了控制权 二、圆形顶部和圆形底部形态的总结…

IDEA切换JDK版本超详细步骤

😀 IDEA切换JDK版本详细教程,全网步骤最详细,实测可用。 文章目录 第一步、选择SDKs切换SDK版本:第二步、选择Modules切换Sources和Dependencies版本:第三步、选择Project切换SDK和Language Level版本:第四…

2024年冲刺年薪40w,java面试常问知识点

前言 刚刚过去的双十一,让“高性能”“高可用”“亿级”这3个词变成了技术热点词汇,也让很多人再次萌发成为「架构师」的想法。先问大家一个问题:你觉得把代码熟练、完成需求加上点勤奋,就能成为架构师么?如果你这么认…

MySQL:索引的优化方法

索引是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。 索引创建的时机: 索引并不是越多越好的,虽然他再查询时会提高效率,但是保存索引和维护索引也需要一定的空间和时间成本的。 不创建索引&#xff1a…

从一个word里面复制表格到另一个word时,表格变形的问题

复制过来保留源格式,检查段落、页边距里面的格式都和原始word一致后,仍然表格变形。 这时点页边距-自定义页边距-文档网格 看字符数是不是一致的

【Logback】Logback 中的 Appenders

目录 1、什么是 Appenders? 2、解说 AppenderBase.doAppend() 方法 3、logback-core 模块中的 Appenders (1)OutputStreamAppender (2)ConsoleAppender (3)FileAppender (4&a…

SpringCloud微服务-DockerCompose(初识、安装、部署)

DockerCompose(初识、安装、部署) 文章目录 DockerCompose(初识、安装、部署)初识DockerCompose?DockerCompose安装DockerCompose部署微服务问题解决(重要!!!&#xff09…

小白跟做江科大51单片机之DS1302按键可调时钟

1.引入上一个程序的代码 2.引入Key和Timer0文件 3.获取按键值 定义全局变量unsigned char keynum main函数中 keynumKey(); 4.设置第一个按键的两种模式,以此来控制时钟的设定和显示 if(keynum1) { if(MODE0) { …