Chenerdy的幻想乡
首页文章归档风说书笔记说说友链项目相册关于
← 全部科目

Python爬虫

课次目录

00开篇01爬虫简介02Requests请求03正则04数据解析05selenium自动化06DrissionPage自动化
笔记/Python爬虫/第 02 课

Python爬虫笔记(02):Requests请求

2026-09-13 19:00:00

02-Requests请求

request

requests是一个广泛使用的 HTTP 库,由 Kenneth Reitz 开发。它简化了 Python 与 HTTP 协议的交互,使得发送各种 HTTP 请求变得轻而易举,避免了使用 Python 标准库urllib时复杂的操作,极大地提升了开发效率

初步使用

以搜索引擎为示例进行爬取网页数据

Python 实例
import requestsrespones = requests.get('https://www.sogou.com/')​print(response.status_code)  #  .status_code 查看响应状态码print(response.text)  # 查看网页内容 ​

User-Agent: 表示用户用什么设备发起请求, 设置后进行伪装让后端不在让认为你是一个自动化程序

Python 实例
# 搜狗网站首页进行搜索 或 百度首页进行搜索内容的链接url = f'https://www.sogou.com/web?query={val}'#  设置后进行伪装让后端不在让认为你是一个自动化程序, 处理一个小小的反爬headers = { "User-Agent": "" }resp = requests.get(url,headers=headers)​print(resp.status_code)print(resp.text)print(resp.request.headers) # 查看请求头  未设置UA时:不是正常的设置请求数据

请求类型

Python 实例
requests.get('http://httpbin.org/get')   # GET请求requests.post('http://httpbin.org/post')  # POST请求requests.put('http://httpbin.org/put')requests.delete('http://httpbin.org/delete')requests.head('http://httpbin.org/get')requests.options('http://httpbin.org/get')

GET请求数据

查询GET参数

Python 实例
# 天气数据网址:  https://www.weather.com.cn/url1 = 'https://cy.weather.com.cn/api/v1/promo_pos' # 对应地址headers = {    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36"}res = requests.get(url1, params={"ids": 3}, headers=headers)​print(res.text)  # 文本data = res.json() # 获取json数据   ===等同于  json.loads(res.text)print(data["msg"]) # 字典取值
  • json.loads() 解析json数据
  • json.dumps() 将py数据转化成json格式

post请求携带数据

实例
import json# 百度翻译url = 'https://fanyi.baidu.com/sug'haha = {    "kw": "dog"}resp = requests.post(url, headers=headers, data=haha)  # data参数:携带POST请求参数print(resp.status_code)  # .status_code 查看响应状态码print(resp.text)  # 获取文本字符串​print(resp.json())  # 获取json数据格式print(json.loads(resp.text)) # 获取json数据格式  

二进制数据

图片/pdf/视频为二进制数据, bytes 类型是一种不可变的数据类型,用于表示二进制数据

实例
import requests# 请求图片地址r=requests.get('https://img0.baidu.com/it/u=2852563613,929482691&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1400')print(r.text)  # 乱码 ​data = r.content   # .content获取二进制数据 print(data)print(type(data)) # bytes 二进制数据格式​# 将数据保存到本地with open('bbtp.gif','wb')as f:     f.write(data)

response属性

实例
import requests# 简书 是http 不是httpsurl = 'http://www.jianshu.com'headers = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}​r = requests.get(url)r = requests.get(url, headers=headers) ​print(r.status_code)print(r.headers) # 查看响应头信息print(r.url) # 查看url​print(r.history) # 查看网页是否进行重定向  302重定向(http://www.jianshu.com)
  • allow_redirects=True(默认):浏览器行为,自动跳转到新页面

  • 实例
    allow_redirects=False

    :停止在重定向指令处,不自动跳转

    • r = requests.get(url, headers=headers,allow_redirects=False)

状态码

  • 200 请求成功
  • 301 302 请求发生跳转
  • 404 页面没找到
  • 500 502 503服务器内部错误

高级操作

写爬虫的时候,有一些网站你必须登录之后才能进行访问, 存在这种需求的时候你就必须要先登录才能访问,http/https 协议 是一种无状态的协议,对事物处理无记忆功能的,那么我们的浏览器是如何来记录这个登录的过程, 需要通过cookie来完成

cookie维持会话

通过cookie设置用户信息(账号+密码) 维持登录状态

对应网址可能会存在失效问题

  • https://www.17k.com/ 17k网址失效

  • Python 实例
    https://www.qidian.com/

    使用起点小说网址

    • 是存在cookie加密和账号无关: 可以用于此处讲解
实例
import requests# 将cookie的身份信息放入了 headers = {    # 'cookie':'',    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36',}​# 17k小说网站   需要设置登录之后设置cookie才能获取到对应的数据resp = requests.get("https://www.qidian.com/",headers = headers)​# 未设置cookie 数据返回不会成功print(response.text)# 登录之后设置cookie 则可以成功获取数据​# 再演示不设置cookie 能不能请求同域名下的数据, 请求也不会成功,需要进行设置

直接使用Cookies请求时,需要手动管理Cookies。你要明确获取Cookies信息,并在每次请求时将其添加到请求中, 后续cookie发生变化时,也需要重新设置

注意:

  • 能获取需要登陆之后才能采集数据, 但是会提高你被反爬的记录(cookie中存在你的信息,你经常请求会被记录,同意被封禁账户)

session会话连接

**Session:**在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。

根据上述对session的解释,session简单来说就是一个会话保持。就好比我们使用session去请求登录包之后,再去对其他页面发起请求的时候,自动就会携带着那些信息再去请求。如果说用爬虫requests请求每一次都是一个全新的请求,那么session请求就是包含上一次请求信息的请求(也就是等同于会保存 cookie 和记录的浏览

超时设置

实例
url= 'https://www.baidu.com'r = requests.get(url,timeout =0.00000001)  # 秒  timeout =(30,30) 请求 响应print(r.status_code)

异常处理

实例
try:  # 处理异常,可能出现异常的代码都写在try方法里面    url= 'https://www.baidu.com'    r = requests.get(url,timeout = 0.00000000001)  # 秒    print(r.status_code)except: # 出现异常怎么处理    print('timeout!')finally:    print("默认: 无论怎么样都会执行")

代理设置

防止ip地址被封,无法爬取对应数据

内网ip - 1

公网ip - 2

快代理网址: https://www.kuaidaili.com/free/

  • 隧道代理
    • 代理服务器会自动为你轮换IP地址,每次请求或按时间间隔更换一个IP。你只需要配置一个代理地址,IP切换由服务端自动完成
    • 无需手动切换IP,自动化程度高,适合大规模任务。因为IP不断变化,匿名性更强,不易被目标网站追踪和封禁
    • 适用于: 大规模网页抓取、批量注册账号、刷流量、刷票等需要频繁更换IP的任务
  • 私密代理
    • 一个代理IP地址仅供你一个用户使用,不会与他人共享。重点在于 "独享使用权"
    • 速度通常很快,连接稳定
  • 独享代理
    • 与私密代理相同,IP仅供你一人使用
  • 海外代理
    • 代理服务器位于中国以外的国家或地区
    • 核心作用是伪装你的地理位置,让你能够以目标国家的网络身份访问互联网。
  • 静态住宅海外代理
    • 纯净独享: IP独属唯一客户,避免IP被滥用或污染,保障数据安全和独立性。

代理ip地址基本上都需要对于的账号密码,进行验证

实例
import requests# 提取代理API接口,获取1个代理IPapi_url = "https://dps.kdlapi.com/api/getdps/?secret_id=o4zsfebj9j4nm0izhp7s&signature=ocoxalcpllkatvl57beyisep1vzj58p8&num=1&sep=1"​# 获取API接口返回的代理IPproxy_ip = requests.get(api_url).text​# 用户名密码认证(私密代理/独享代理)username = "d2089925381"password = "8ujkam0p"proxies = {    "http": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip},    "https": "http://%(user)s:%(pwd)s@%(proxy)s/" % {"user": username, "pwd": password, "proxy": proxy_ip}}​# 要访问的目标网页target_url = "https://dev.kdlapi.com/testproxy"​# 使用代理IP发送请求response = requests.get(target_url, proxies=proxies)​# 获取页面内容if response.status_code == 200:    print(response.text)

查看我的 IP 地址 | 查询本机 IP 地址及归属地 | ip.skk.moe | Sukka (https://ip.skk.moe/)

站长工具 - 站长之家

← Python爬虫笔记(01):爬虫简介Python爬虫笔记(03):正则 →

留言

目录