目录
简介
基本使用编辑
编辑
安装
一个类型和六个属性
请求类型
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请求,并将headers
和data
作为参数传递给post()
方法。
总之,通过使用Requests库,我们可以轻松地进行HTTP请求,并且可以方便地获取响应的状态码、内容等。这使得编写爬虫程序变得更加简单和高效。
基本使用
安装
使用下面的路径直接在清华源安装即可
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ requests
一个类型和六个属性
Requests库提供了一些常用的属性,包括:
status_code
:响应的状态码,如200表示请求成功,404表示资源未找到等。text
:响应的内容,以字符串形式返回。content
:响应的内容,以二进制形式返回。headers
:响应的头部信息,以字典形式返回。url
:响应的URL地址。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~