Python爬虫——Requests

news2024/11/25 20:51:51

目录

简介

 基本使用​编辑

​编辑

安装

一个类型和六个属性

请求类型

GET

代码示例

POST

代码示例

代理

古诗文网绕过验证码登录

总结


简介

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

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

import requests

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

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

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

import requests

headers = {'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 requests

url = '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 requests

response = 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 requests

url = '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 requests

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

代码示例

import requests
import json

url = '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.text

obj = json.loads(content, encoding='utf-8')
print(obj)

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

(2)请求参数是data

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


代理

直接上代码示例

import requests
import json

url = '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.text

with 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.text

with open('gsw.html', 'w', encoding='utf-8') as fp:
    fp.write(content_post)

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

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


总结

我以后总结

再见

ヾ( ̄▽ ̄)Bye~Bye~

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

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

相关文章

【嵌入式——QT】QTableWidget

表格小部件为应用程序提供标准的表格显示功能。QTableWidget中的项由QTableWidgetItem提供。 如果你想要一个使用你自己的数据模型的表,你应该使用QTableView而不是这个类。 常用函数 cellWidget(int row, int column) const:返回显示在给定行和列的单…

嵌入式 Linux 开发的基本概念 及 学习路线

原文链接:https://www.cnblogs.com/DSCC2020/p/13787321.html 1.嵌入式 Linux 开发的基本概念 1.1嵌入式 Linux 的组成 嵌入式 Linux 系统,就相当于一套完整的 PC 软件系统,如下图所示: 1.2嵌入式 Linux 的日常开发流程 Bootloa…

【深度学习】实验10 使用Keras完成逻辑回归

文章目录 使用Keras完成逻辑回归1. 导入Keras库2. 生成数据集3. 构造神经网络模型4. 训练模型5. 测试模型6. 分析模型 附:系列文章 使用Keras完成逻辑回归 Keras是一个开源的深度学习框架,能够高效地实现神经网络和深度学习模型。它由纽约大学的Francoi…

MS5192TA/MS5193TA低噪声、低功耗、16/24 位 ∑-ΔADC

产品简述 MS5192TA/MS5193TA 是一款适合高精度测量应用的低功耗、低 噪声、三通道差分输入的 16bit/24bit 模数转换器。其内部集成了输 入缓冲器、低噪声仪表放大器,当增益设置为 64 ,更新速率为 4.17Hz 时,均方根噪声为 25nV 。集…

uniapp自定义底部导航

我这边使用的是uview组件库&#xff0c;进行开发的&#xff01; <template><view class"footer-bar"><u-tabbar :value"select ? select : 0" change"changeTab" :border"true" :fixed"true" :placeholde…

2025汤家凤考研数学,基础视频课程+百度网盘+PDF真题讲解

平时大家都半开玩笑地讲&#xff1a;我数学想要考150分&#xff01;那索性今天这一期&#xff0c;今天认真和大家聊一下&#xff1a; 想考到考研数学150分&#xff0c;应该如何准备&#xff1f; 如果还有小伙伴不知道在哪看汤神的ke&#xff0c;可以看一下以下 2025汤神全程…

JVM入门篇(面试前速补)

近期看看JVM&#xff0c;看了狂神说入门教学&#xff0c;总结下给大家。 文章目录 1、JVM的位置2、JVM的结构体系3、类加载器及双亲委派机制3.1、类加载器作用3.2、类加载器类型3.3、双亲委派机制 * 4、沙箱安全机制5、Native、方法区5.1、Native&#xff08;本地方法栈引用&a…

算法设计.

文章目录 1. 贪心算法&#xff1a;只看当前1.1 零钱兑换问题&#xff1a;力扣322 2. 活动选择问题3. 动态规划3.1 不同路径&#xff1a;3.2 0-1背包问题3.3 完全背包问题3.4 零钱兑换-动态规划 4. 最长公共字串--动态规划5. 最长公共子序列6. 最长递增子序列7. 打家劫舍8. 全排…

从mysql 数据库表导入数据到elasticSearch的几种方式

从MySQL数据库导入数据到Elasticsearch有几种方式&#xff0c;主要包括以下几种&#xff1a; 1. 使用Logstash&#xff1a; Logstash是一个开源的数据收集引擎&#xff0c;可以用来从不同的数据源导入数据到Elasticsearch。它具有强大的数据处理能力和插件生态系统&…

信息熵、KL散度、交叉熵、互信息、点互信息

信息熵 信息量 信息量是对信息的度量&#xff0c;衡量事件的不确定性&#xff0c;越小概率的事件发生了产生的信息量越大。我们应该用什么形式的函数表达信息量呢&#xff1f;除了随着概率增大而减少&#xff0c;这个函数还有具有以下性质&#xff1a; 如果有两个事件x和y彼…

利用Python爬取高德地图全国地铁站点信息

利用Python中的requests库进行地铁站点信息的获取,同时将数据保存在本机excel中 # 首先引入所需要的包 import requests from bs4 import BeautifulSoup import pandas as pd import json# 发送 GET 请求获取网页内容 url http://map.amap.com/subway/index.html response r…

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

K线实战分析系列之二十三&#xff1a;塔形顶部和塔形底部 一、塔形顶部和塔形底部二、塔形顶部和塔形底部总结 一、塔形顶部和塔形底部 塔形顶部&#xff1a;预示着阶段性顶部的形成 塔型底部&#xff1a;预示着阶段性底部的形成 二、塔形顶部和塔形底部总结 形态的两…

字节后端实习 一面凉经

心脏和字节永远都在跳动 深圳还有没有大厂招后端日常实习生啊&#xff0c;求捞&#xff5e;&#xff08;boss小公司也不理我&#xff09; 很纠结要不要干脆直接面暑期实习&#xff0c;又怕因为没有后端实习经历&#xff0c;面不到大厂实习。死锁了

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)

活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后&#xff0c;深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…

微信公众号公司主体变更怎么办?

公众号迁移的好处有哪些&#xff1f;迁移后原公众号还能用吗&#xff1f;1&#xff09;获得更多权限功能如果公众号是个人主体&#xff0c;想进行认证&#xff0c;拥有更多权限功能。例如菜单栏跳转外部链接&#xff0c;相拥有留言功能&#xff0c;服务号认证获得开发权限等。就…

@德人合科技|公司数据防泄漏软件,防止内部文件数据资料外泄!

现如今&#xff0c;企业都普遍面临数据安全问题的挑战&#xff0c;随着数据泄漏事件不断增加&#xff0c;企业需要强有力的数据防泄漏系统来保护机密信息。 www.drhchina.com 德人合科技 | 公司数据防泄漏软件&#xff0c;防止内部文件数据资料外泄&#xff01; 公司数据防泄漏…

基于springboot的精品在线试题库系统设计与实现(程序+数据库+文档)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 目录 一、研…

微软研究深度报告:Sora文转视频AI模型全景剖析及未来展望

论文由微软研究团队撰写&#xff0c;这篇论文深入探讨了Sora的发展背景、核心技术、新兴应用场景、现有的局限性以及未来的发展机会&#xff0c;基于公开资料和团队自行进行的逆向工程分析。文中详尽且逻辑清晰&#xff0c;建议细读全文以获得深入了解。 原文&#xff1a;Sora…

优思学院《质量工程师入门攻略2024》

作为一名质量工程师&#xff0c;进入这个行业首先需要理解“质量”的本质含义。质量并非单一维度&#xff0c;而是产品或服务在满足预期程度上的体现。从狭义到广义的质量&#xff0c;涵盖从产品细节到客户满意度的多个方面。 1. 质量的定义是以顾客需求为准 第一&#xff0c…

高级语言讲义2018计专(仅高级语言部分)

1.编写完整程序解决中国古代数学家张丘健在他的《算经》中提出的”百钱百鸡问题“&#xff1a;鸡翁一&#xff0c;值钱五&#xff1b;鸡母一&#xff0c;值钱三&#xff1b;鸡雏三&#xff0c;值钱一&#xff1b;百钱买百鸡&#xff0c;翁&#xff0c;母&#xff0c;雏各几何 …