首页 > 其他分享 >60.requests模块

60.requests模块

时间:2024-08-01 10:43:43浏览次数:8  
标签:请求 url 60 headers 模块 requests response target

【一】爬虫初识

1)概念

  • 爬虫是一种自动化获取互联网数据的技术,通过模拟浏览器行为,向目标网站发送请求并获取响应,然后解析响应中的数据

2)工作原理

  • 发送HTTP请求,模拟浏览器行为,获取网站的响应,并解析响应中的数据

3)分类

  • 通用爬虫:对整个互联网进行爬取
  • 定向爬虫:只针对特定的网站进行爬取
  • 基于规则的爬虫基于人工事先定义的规则提取数据
  • 基于机器学习的爬虫通过机器学习算法自动提取数据
  • 单机爬虫在单个计算机上运行
  • 分布式爬虫通过多台计算机协同工作

4)爬虫常用库

  • requests库

    • 用于发送HTTP请求,方便地发送GET、POST等请求,并获取响应
  • BeautifulSoup库

    • 用于解析HTML和XML文档,方便地提取其中的数据
  • Scrapy框架

    • 提供了一套完整的爬虫开发流程,包括发送请求、获取响应、解析响应、存储数据等步骤
  • Selenium库

    • 用于模拟浏览器行为,模拟用户在浏览器中的操作,如点击、输入等

5)爬虫流程

  • 发送请求

  • 获取响应

  • 解析响应

  • 存储数据

6)反爬措施

  • 频率限制
  • 封IP和封账号
  • 请求头中带加密信息
  • 响应回来的数据是加密
  • 验证码反扒
  • JS加密
  • 手机设备唯一ID号

【二】requests模块 初识

1)概念

  • Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库
  • 它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求
  • 是一个功能强大、简洁易用的第三方Python库,用于发送HTTP请求

2)使用

1.安装

pip install requests

2.示例

import requests

# 确认网址
target_url = 'https://www.baidu.com/'
# 发起简单的get请求,并获取响应
response = requests.get(url=target_url)
# 解码(utf-8 / gbk)
response.encoding = 'utf-8'
# 获取数据
print(response.text)

【三】requests模块之get请求

1)发送get请求

import requests

target_url = 'https://www.bilibili.com/'
response = requests.get(url=target_url)
# 判断请求是否成功
if response.status_code == 200:
    response.encoding = 'utf-8'
    print(response.text)
else:
    print(f"当前请求数据失败!错误码: {response.status_code}")

2)携带请求体

target_url = 'https://www.baidu.com/s?wd=B%E7%AB%99'

1.浏览器标识UA

  • 网络
User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0
  • 示例

    import requests
    
    target_url = 'https://www.baidu.com/s?wd=B%E7%AB%99'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'}
    response = requests.get(url=target_url, headers=headers)
    if response.status_code == 200:
        response.encoding = 'utf-8'
        page = response.text
        print(page)
    else:
        print(f"当前请求数据失败!错误码: {response.status_code}")
    

2.随机UA模块

# 安装
pip install fake-useragent
# 使用
from fake_useragent import UserAgent

headers = {'User-Agent': UserAgent().random}
  • 示例

    import requests
    from fake_useragent import UserAgent
    
    target_url = 'https://www.baidu.com/s?wd=B%E7%AB%99'
    headers = {'User-Agent': UserAgent().random}
    response = requests.get(url=target_url, headers=headers)
    if response.status_code == 200:
        response.encoding = 'utf-8'
        page = response.text
        print(page)
    else:
        print(f"当前请求数据失败!错误码:{response.status_code}")
    

3)携带 请求体参数params

# 使用urlencode对参数进行编码
from urllib.parse import urlencode

keyword={'wd':'B站'}
params = urlencode(keyword, encoding="utf8")
target_url = "https://www.baidu.com/s?"+ params
# 使用requests模块内置的方法
params={'wd':'B站'}
response = requests.get(
    url=target_url, 
    params=params,
    headers=headers)
  • 示例

    from fake_useragent import UserAgent
    
    params = {'wd': 'B站'}
    target_url = 'https://www.baidu.com/s'
    headers = {'User-Agent': UserAgent().random}
    response = requests.get(url=target_url, params=params, headers=headers)
    if response.status_code == 200:
        response.encoding = 'utf-8'
        page = response.text
        print(page)
    else:
        print(f"当前请求数据失败!错误码: {response.status_code}")
    

4)携带 请求头中Cookie

  • Cookie作用是保存登录
# 直接携带在请求头中
...
headers = {
    'Cookie':'......'
    'User-Agent': UserAgent().random
}
...
# 携带在请求参数中

# 对 cookies 参数进行切分成字典格式键值对
def split_cookies(cookies):
    first_data_start = cookies.split(";")
    return {key: value for key, value in [item.split("=") for item in first_data_start]}
...
response = requests.get(
    url=target_url, 
    headers=headers,
    cookies=cookie
)

【四】requests模块之post请求

# 目标网站
http://www.aa7a.cn/user.php
# 网络 -> user.php -> 负载
username: [email protected]
password: 123
captcha: 1
remember: 1
ref: http://www.aa7a.cn
act: act_login
  • 示例

    from fake_useragent import UserAgent
    
    target_url = 'http://www.aa7a.cn/user.php'
    headers = {'User-Agent': UserAgent().random}
    data = {
        'username': '[email protected]',
        'password': '123',
        'captcha': '1',
        'remember': '1',
        'ref': 'http://www.aa7a.cn',
        'act': 'act_login',
    }
    response = requests.get(
        url=target_url, 
        headers=headers,
        # 两种方式
        data=data 或 json=data,
    )
    if response.status_code == 200:
        response.encoding = 'gbk'
        page = response.text
        print(page)
    else:
        print(f"当前请求数据失败!错误码: {response.status_code}")
    
  • data=data

    • 默认情况下,requests.post方法将会将data参数以application/x-www-form-urlencoded格式进行编码。
    • 这种编码方式将字典数据转换成键值对的形式,并使用&符号进行连接。
    • 然后,将生成的字符串作为请求的主体数据发送到服务器。这种方式常用于处理表单提交的场景。
  • json=data

    • 当使用requests.post方法时
    • 如果将data参数设置为一个字典,并同时将headers参数中的Content-Type设置为application/json,那么data字典将被自动序列化为JSON字符串,并作为请求的主体数据发送。
    • 这样的请求方式常用于与服务器交互时,需要使用JSON格式进行数据传输的情况。

【五】自动携带cookie 的session对象

# 使用 session 对象保持会话状态
# 生成 session 对象发起请求 Cookie 会自动加载到session对象中
# 下一次请求直接用 session
import requests
from fake_useragent import UserAgent


# 创建session对象
session = requests.Session()
# 定义请求头
headers = {'User-Agent': UserAgent().random}
target_url = 'https://xueqiu.com/'
response = session.get(target_url, headers=headers)
response.encoding = 'utf-8'

target_url = 'https://stock.xueqiu.com/v5/stock/batch/quote.json?symbol=SH000001,SZ399001,SZ399006,SH000688,SH000016,SH000300,BJ899050,HKHSI,HKHSCEI,HKHSTECH,.DJI,.IXIC,.INX'
response = session.get(
    url=target_url,
    headers=headers,
)
page_text = response.text
print(page_text)

【六】requests模块之响应体

1)相关参数

响应体数据类型 格式 介绍
字符串格式 response.text 将响应体转换为字符串形式。
二进制格式 response.content 获取响应体的二进制内容,适用于处理图像、视频等非文本类型的响应
response.json() 会将响应 源码转换为 json 类型的数据格式
响应体编码格式 response.encoding 获取响应的编码方式
响应状态码 response.status_code 获取响应的状态码。
响应头 response.headers 获取响应头信息,返回一个字典对象
响应Cookie response.cookies 获取服务器返回的cookie信息
response.cookies.get_dict() 将cookie信息转换为字典形式
response.cookies.items() 获取cookie信息并以列表形式返回
response.url 获取当前响应的URL。这是在完成HTTP请求并接收到服务器响应后,实际返回的资源URL
response.request.url 获取当前请求的URL。这是发送HTTP请求时使用的原始URL,即你在发出请求时指定的URL
当前请求的重定向URL response.history 如果有重定向,返回一个列表,包含所有经过的重定向URL
迭代获取二进制数据 response.iter_content() 迭代获取响应内容(适用于处理视频、图片等二进制数据)

【七】ssl认证

1)介绍

  • HTTPS请求中 HTTP + SSL 证书
  • HTTP请求是不需要认真的直接就能访问 都会提示 此网站不安全

2)示例

# 认证证书
import requests
url = 'https://ssr2.scrape.center/'
response = requests.get(url)
print(response.status_code)
# certificate verify failed
# 不认证证书
import requests
url = 'https://ssr2.scrape.center/'
response = requests.get(url,verify=False)
print(response.status_code)
# 自定义证书路径
import requests
url = 'https://ssr2.scrape.center/'
cert_file = "/path/to/my_certificate.pem"
response = requests.get(url,verify=cert_file)
print(response.status_code)

【八】代理

1)概念

  • 在网络爬虫和数据抓取的过程中,我们经常需要发送HTTP请求来获取网页内容或与远程服务器进行通信
  • 然而,在某些情况下,直接发送请求可能会受到限制或被阻止,这时就需要借助代理来完成任务
  • 代理在网络通信中起到中间人的作用,它代表我们与目标服务器建立连接并传递请求和响应
  • 通过使用代理,我们可以隐藏真实的IP地址、绕过访问限制,并增加请求的匿名性
  • Python中的requests库提供了便捷且强大的功能来处理HTTP请求,并且支持代理的配置

一般网站都有屏蔽的限制策略,用自己的IP去爬,被封了那该网站就访问不了,这时候就得用代理IP来解决问题了。

封吧,反正封的不是本机IP,封的代理IP。

标签:请求,url,60,headers,模块,requests,response,target
From: https://www.cnblogs.com/Mist-/p/18336142

相关文章

  • ansible常用模块
    ansible常见模块setup#收集远程主机的Facts(每个被管理节点在接收运行管理命令之前,会将自己主机相关信息,如操作系统,IP等信息传递给ansible主机)filter:用于进行条件过滤,如果设置,仅返回匹配过滤条件的信息ansiblehosts1-msetupansiblehosts1-msetup-a"filter=ansibl......
  • 14. 迭代器、生成器、模块与包、json模块
    1.迭代器1.1迭代器介绍迭代器是用来迭代取值的工具每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代#while循环实现迭代取值a=[1,2,3,4,5,6]index=0whileindex<len(a):print(a[index])index+=1 1.2可迭代对象内置有_......
  • INFO6030 - Systems Analysis and Design
    **INFO****6030-****Systems********Analysis********and********Design****Assignment2PartB:SystemD****esign********(30%)****Due:11:59pmFriday2ndAu****gust(Week********12)****Introduction**TheUniversityofNewcastleisreplacingitso......
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-25 ADC模块FEP-DAQ9248采集显示波形方案
    软件版本:Anlogic-TD5.9.1-DR1_ES1.1操作系统:WIN1064bit硬件平台:适用安路(Anlogic)FPGA实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板板卡获取平台:https://milianke.tmall.com/登录"米联客"FPGA社区http://www.uisrc.com视频课程、答疑解惑! 1概述本方案通过把DAQ9......
  • Ansible内置模块之file
    RHCE9.0 (点击查看课程介绍) 上课课时:72课时/12天+考试辅导1-2天开班频率:2个月开一期最新新班:7月27日周末班上课方式:面授/直播;提供随堂录播ansible.builtin.file模块用于管理文件和目录的属性。可以创建、删除文件或目录,修改文件权限、所有者等属性。01 选......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-60 - 判断元素是否显示 - 下篇
    1.简介有些页面元素的生命周期如同流星一闪,昙花一现。我们也不知道这个元素在没在页面中出现过,为了捕获这一美好瞬间,让其成为永恒。我们就来判断元素是否显示出现过。在操作元素之前,可以先判断元素的状态。判断元素操作状态也可以用于断言。2.常用的元素判断方法2.1page对象调......
  • Python:使用默认模块在python中读取excel
    我有Python2.6.6版本,但无法安装pandas、xlrd、xlwt等新模块。我想使用Python读取Excel。是否可以使用Python中存在的默认模块读取Excel。抱歉,不能使用Python2.6.6的默认模块读取Excel文件。Python没有内置的功能来处理Excel文件。使用外部库(如提......
  • 学习Java的日子 Day60 JSP
    JSP核心技术1.什么是JSPJSP和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。JSP实际上就是ServletJSP这门技术的最大的特点在于,写jsp就像在写html,但它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据......
  • 继电器模块详解
    继电器,一种常见的电控制装置,其应用几乎无处不在。在家庭生活,继电器被广泛应用于照明系统、电视机、空调等电器设备的控制;在工业领域,它们用于控制电机、泵站、生产线等高功率设备的运行;继电器还在通信网络、交通系统以及医疗设备中发挥着重要作用。不仅如此,继电器也是学习其他电子......
  • 我有一个“pywhatkit”python 模块属性错误。你能帮我吗?
    Pywhatkit已成功安装,但在任何属性代码中都显示属性错误。我可以修复它吗?我尝试过的代码:importpywhatkitpywhatkit.sendmsg('071*******','Ado',15,48)我如何修复这个问题:我将程序文件名“pywhatkit.py”重命名为“anotername.py”。谢谢所有帮......