Python爬虫——Requests

目录

简介

 基本使用​编辑

​编辑

安装

一个类型和六个属性

请求类型

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~

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

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

相关文章

【MATLAB源码-第158期】基于matlab的海马优化算法(SHO)无人机三维路径规划,输出做短路径图和适应度曲线

操作环境: MATLAB 2022a 1、算法描述 海马优化器(Sea Horse Optimizer, SHO)是一种近年来提出的新型启发式算法,其设计灵感来源于海洋中海马的行为模式,特别是它们在寻找食物和伴侣时表现出的独特策略。海马因其独特…

【Flink网络数据传输】OperatorChain的设计与实现

文章目录 1.OperatorChain的设计与实现2.OperatorChain的创建和初始化3.创建RecordWriterOutput 1.OperatorChain的设计与实现 OperatorChain的大致逻辑 在JobGraph对象的创建过程中,将链化可以连在一起的算子,常见的有StreamMap、StreamFilter等类型的…

[C语言]——分支和循环(1)

目录 一.if语句 1.if 2.else 3.分支中包含多条语句 4.嵌套if 5.悬空else问题 二.关系操作符 三.条件操作符 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析&a…

xinput1_3.dll丢失都有什么办法可以有效的解决、xinput1_3.dll导致游戏不能启动怎么办?

使用电脑的过程中是不是会遇到关于某个dll文件丢失的提示,今天想和大家聊的是xinput1_3.dll文件,如果电脑提示xinput1_3.dll丢失有什么办法可以有效的解决,解决办法都有哪些,如果xinput1_3.dll丢失会对电脑有什么影响。&#xff0…

8、Linux-软件安装:rpm和yum;配置yum阿里云镜像源

一、介绍 Linux安装软件有两种方式, ①rpm:安装已有的安装包,类似于Windows中双击exe的安装包程序 ②yum:拉取远程仓库的文件,类似于python的pip install 区别:假设软件A依赖软件B,软件B依赖…

【打工日常】Linux实现可回滚的回收站功能

1.为什么创建可回滚的回收站功能? 为了让运维人员可以有回旋的余地,但是也要保证可以清理不需要的文件。 2.涉及到的文件安全概念? Linux的文件安全概念主要涉及到文件权限和文件系统安全两个方面。 那什么是文件权限? 在Linux系统…

数学建模【整数规划】

一、整数规划简介 整数规划其实是线性规划和非线性规划的一个特殊情况,即有的变量取值只能是整数,不能是小数。这时候就需要一个新的函数来解决问题。 对于整数规划,分为线性整数规划和非线性整数规划 线性整数规划:MATLAB可进…

VS2022打包C#安装包(最新、最全)

开发c#的一个小工具到打包环境碰壁了,在网上找了很多资料耶踩了很多坑,耗时1hour才打包完毕,避免以后碰到类似的问题再次记录,自认为步骤比较全面,如果有帮助麻烦点个赞呗!!! 一、Mi…

MATLAB知识点:循环语句的经典练习题

​讲解视频:可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili 节选自​第4章:MATLAB程序流程控制 下面我们来看…

代码随想录(day1)

1. 二分查找: 704. 二分查找 - 力扣(LeetCode) 对于二分查找的思想较为简单,具体如下: 假设寻找的值为,分别定义两个变量,其中,。 再定义一个变量,如果,表示需要查找的元…

灵魂指针,教给(一)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 一、内存和地址 1.1 内存 在介绍知识之前,先来想一个生活中的小栗子: 假如把你放在一个有100间屋子的酒店…

flutter_gen依赖

flutter_gen 5.4.0 flutter项目内终端: dart pub global activate flutter_gen export PATH“ P A T H " : " PATH":" PATH":"HOME/.pub-cache/bin” fluttergen

为 OpenBMC 添加一个新的系统

1. 前言 在上一篇文章中向大家介绍了 OpenBMC 的是什么以及它的作用和应用场景,并且以一个自带的示例平台 romulus 展示了从下载源码包开始到启动系统并访问 Web 控制页面的整体构建流程。 通过前文已经了解到如何为已有的平台构建系统镜像,下面我们来…

AcWing 1027. 方格取数

解题思路 相关代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int nums[][] = new int[n+1][n+1];while(true){int a = scanner.nextInt();int b = scanner.…

1.初识python

1.初识python 编程语言是用来定义计算机程序的语言,用来向计算机发出指令。 1.python语言是一种面向对象的解释型高级编程语言。 解释型语言:使用专门的解释器对源码程序逐行解释成特定平台的机器并立即执行,是代码在执行时才被解释器一行行…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…

Redis报错NOAUTH Authentication required怎么解决?

问题描述 在使用redis-cli时,可能会遇到报错 (error) NOAUTH Authentication required. 问题分析 这是因为在redis的配置文件 redis.windows-service.conf 中设置了密码,导致了这个问题 问题解决 1. 在redis.windows-service.conf文件查看密码 2. 输…

苹果曝出两个 iOS 系统 0-Day 漏洞

最近,苹果公司发布了紧急安全更新,解决了两个 iOS 零日漏洞。这些漏洞存在于 iOS 内核(CVE-2024-23225)和 RTKit(CVE-2024-23296)中,威胁攻击者可利用其绕过内核内存保护,这就给了具…

[R] ggplot2 - exercise (“fill =“)

We have made the plots like: Lets practice with what we have learnt in: [R] How to communicate with your data? - ggplot2-CSDN博客https://blog.csdn.net/m0_74331272/article/details/136513694 #tutorial 5 -script #Exercise 1 #1.1# ggplot(smoking_and_drug_use_…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // // // // 示例 1: // // //输入:n 2 //输出:2 //解释:有两种方法可以爬到楼顶。 /…