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)
相关推荐
风之所往_1 小时前
Python 3.1 新特性全面总结
python
贫民窟的勇敢爷们1 小时前
构建基于Python与机器学习的智能客服
开发语言·python·机器学习
shehuiyuelaiyuehao1 小时前
算法20,x的平方根
开发语言·python·算法
AI精钢1 小时前
AI 正在重构所有 App:要么消失,要么原生于智能体框架之上
人工智能·python·云原生·重构·aigc
测试员周周1 小时前
【AI测试数据及模型质量2】换一批测试数据,模型得分差20%——AI评测翻车的根子,90%在数据质量
人工智能·python·ui·单元测试·测试用例·集成测试·pytest
神仙别闹1 小时前
基于Python实现一个C语言的编译器
java·c语言·python
yivifu1 小时前
使用PyMuPDF基于对PDF文档内容的分析自动识别并删除PDF文件中的水印
python·pdf·pymupdf·去水印
Allen_LVyingbo1 小时前
面向医疗群体智能的协同诊疗与群体决策支持系统(下)
开发语言·数据结构·windows·python·动态规划
于先生吖1 小时前
家政派单小程序源头开发厂家
python