SpiderDemo第一关

1.开f12失败

但是关闭f12请求成功

2.我们使用抓包工具来对比两次请求包,看看f12的请求包有什么不一样

然后测试这个失败的包,

发现删除

Pragma: no-cache

Cache-Control: no-cache

这两个字段后就可以正常获取数据了

那么为什么开了f12会有这两个字段,原来是因为选择了这两个

2.抓取包

现在关闭了这两个字段之后,f12就可以正常抓取包了

技巧一:

因为在爬虫中,获得的数据更多是动态数据,所以我们在筛选包的时候,可以只选择Fetch/XHR:

然后我们复制bash,生成爬虫代码,具体可看博主写的《人民的爬虫》

技巧二:

但是是失败的,这里我们有一个看结果的技巧,我们发现结果是unicode编码,而且是json格式,我们就可以看到编码后的汉字了

原理:

  1. response.text - 原始文本

返回服务器响应的原始字符串内容

如果服务器返回的是 Unicode 转义序列(如 \u68c0\u6d4b),它会原样显示

这是 JSON 格式的字符串表示,还没有被解析

  1. response.json() - 解析后的 Python 对象

使用 json 模块解析响应内容

自动将 Unicode 转义序列(\uXXXX)解码为对应的中文字符

返回 Python 字典/列表等数据结构

扩展:response.text 和 response.json () 区别 & 使用场景

一、对比表格

方式 返回类型 原理 适用场景 优缺点
response.text 字符串 str 把响应原始报文按编码解码成普通文本 1. 返回 HTML 网页2. 返回纯文本 / 普通字符串3. 不确定返回格式,只想看原始内容4. 接口不是标准 JSON 通用不报错,不能直接点键取值,要自己字符串处理
response.json() Python 字典dict/ 列表list 自动把响应文本loads 反序列化成 JSON 对象 1. 接口明确返回 标准 JSON 2. 需要读取里面字段:success/error/data 等 直接取值方便;非 JSON 会直接抛解析异常

二、一句话总结

只要接口返回标准 JSON、需要拿里面字段,就用 response.json();返回网页 HTML、纯文本,或者不确定格式怕报错,就用 response.text。

3.让代码成功运行

为什么浏览器可以正常运行,但是之前管用的爬虫现在也报错了

原因:因为这样子的cookie的传递和浏览器有区别

解决方法1:

添加,并在调用时候调用session

python 复制代码
session = requests.Session()
session.headers.clear()  # 清空默认头

解决方法2:

修改requests库:

python 复制代码
from curl_cffi import requests

其他都不修改,即可成功

4.循环获取100个数字

python 复制代码
from curl_cffi import requests

cookies = {
    'sessionid': 'axqdb7vbszzwf2o6eb1x1a6d1l01qen2',
}

headers = {
    'accept': 'application/json, text/javascript, */*; q=0.01',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'priority': 'u=1, i',
    'referer': 'https://spiderdemo.cn/sec1/header_check/',
    'sec-ch-ua': '"Chromium";v="146", "Not-A.Brand";v="24", "Microsoft Edge";v="146"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
    'x-requested-with': 'XMLHttpRequest',
    # 'cookie': 'sessionid=axqdb7vbszzwf2o6eb1x1a6d1l01qen2',
}

params = {
    'challenge_type': 'header_check',
}

all_page_data = []

for page_num in range(1, 101):
    url = f'https://spiderdemo.cn/sec1/api/challenge/page/{page_num}/'
    response = requests.get(url, params=params, cookies=cookies, headers=headers)
    response_data = response.json()
    page_data = response_data.get('page_data', [])
    all_page_data.extend(page_data)
    print(f"第 {page_num} 页: 提取到 {len(page_data)} 条数据")

print(f"\n总共提取到 {len(all_page_data)} 条数据")
print("\n所有提取的数据:")
a=0
for i, data in enumerate(all_page_data, 1):
    print(f"{i}. {data}")
    a=a+data
print(a)
相关推荐
卷无止境6 小时前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
灿飞屋8 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc8 小时前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash
青少儿编程课堂9 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛
灿飞屋11 小时前
Kotlin与Java虚拟机四:函数
java·python·kotlin·安卓·android jetpack
一晌小贪欢13 小时前
Python基础:第 09 篇 · while 循环:重复直到不满足
开发语言·c++·python·数据可视化·面向对象·python办公
一条大祥脚13 小时前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机14 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_15 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰15 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain