python3网络爬虫开发实战 第二版:绑定回调

复制代码
import asyncio
import requests

async def request():
    url = 'https://www.baidu.com'
    status = requests.get(url)  # 同步阻塞的GET请求

    print("This is :",status)
    print("Text is :",status.text)

    return status

def callback(task):
    print('Status:',task.result())

coroutine = request()   # 创建协程对象(此时协程未执行)

task = asyncio.ensure_future(coroutine)     # 将协程包装为Future/Task对象
task.add_done_callback(callback)        # 为任务绑定回调:任务完成后执行callback
print('Task:',task)

loop = asyncio.get_event_loop()     # 获取默认的事件循环对象
loop.run_until_complete(task)       # 启动事件循环,直到task执行完毕
print('Task:',task)

核心理解:requests.get(url) 是什么?

requests.get() 是 Python requests 库提供的同步阻塞式 HTTP GET 请求方法,作用是向指定的 URL 发送 HTTP GET 请求,等待服务器响应并返回一个 Response 响应对象。

结合你的代码分析 requests.get(url)

1. 代码中的执行逻辑

你在异步协程函数 request() 中调用了这行代码:

复制代码
async def request():
    url = 'https://www.baidu.com'
    status = requests.get(url)  # 重点分析这行
    return status
  • 同步特性 :当事件循环驱动协程执行到 requests.get(url) 时,整个程序会阻塞在这里 ------CPU 会一直等待网络请求的往返(从发送请求到收到百度服务器的响应),期间无法做任何其他事,直到拿到响应结果后,才会执行 return status
  • 返回值这行代码的返回值是 requests.models.Response 对象(你代码中赋值给了 status 变量),这个对象包含:
    • 状态码(status_code,比如 200 表示成功);
    • 响应头(headers);
    • 响应内容(text 是网页源码,content 是二进制内容)等。
  • 你后续通过 task.result() 拿到的就是这个 Response 对象,所以回调函数打印的是 <Response [200]>(200 是 HTTP 状态码)。

运行结果:

增加了以下两行代码:

复制代码
print("This is :",status)
    print("Text is :",status.text)

这两行代码测试requests.get(url)返回值的内容。

相关推荐
Dovis(誓平步青云)1 小时前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
tianyu2341 小时前
Java 正则表达式终极指南:从 Pattern 到 Matcher,从双重转义到性能优化,一篇全搞定
java·开发语言·正则表达式·group·find·pattern·matcher
caimouse3 小时前
ReactOS 窗口系统分析(23):键盘 — keyboard.c + kbdlayout.c
c语言·开发语言·计算机外设
Emily156853598703 小时前
Emerson 1C31129G03 Analog Input Module
java·开发语言·前端·plc·emerson·1c31129g03·input module
就叫_这个吧8 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡8 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管8 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头1068 小时前
向量数据库从相似度检索走向融合数据底座
数据库
聪明蛋子哟9 小时前
Stagehand v3多语言SDK:Python/Go/Rust/Java下的浏览器自动化统一方案
python·golang·rust
今天AI了吗10 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习