1.开f12失败但是关闭f12请求成功2.我们使用抓包工具来对比两次请求包看看f12的请求包有什么不一样然后测试这个失败的包发现删除Pragma: no-cacheCache-Control: no-cache这两个字段后就可以正常获取数据了那么为什么开了f12会有这两个字段原来是因为选择了这两个2.抓取包现在关闭了这两个字段之后f12就可以正常抓取包了技巧一因为在爬虫中获得的数据更多是动态数据所以我们在筛选包的时候可以只选择Fetch/XHR然后我们复制bash生成爬虫代码具体可看博主写的《人民的爬虫》技巧二但是是失败的这里我们有一个看结果的技巧我们发现结果是unicode编码而且是json格式我们就可以看到编码后的汉字了原理1. response.text - 原始文本返回服务器响应的原始字符串内容如果服务器返回的是 Unicode 转义序列如 \u68c0\u6d4b它会原样显示这是 JSON 格式的字符串表示还没有被解析2. 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. 接口明确返回标准 JSON2. 需要读取里面字段success/error/data等直接取值方便非 JSON 会直接抛解析异常二、一句话总结只要接口返回标准 JSON、需要拿里面字段就用response.json()返回网页 HTML、纯文本或者不确定格式怕报错就用response.text。3.让代码成功运行为什么浏览器可以正常运行但是之前管用的爬虫现在也报错了原因因为这样子的cookie的传递和浏览器有区别解决方法1添加并在调用时候调用sessionsession requests.Session() session.headers.clear() # 清空默认头解决方法2修改requests库from curl_cffi import requests其他都不修改即可成功4.循环获取100个数字from curl_cffi import requests cookies { sessionid: axqdb7vbszzwf2o6eb1x1a6d1l01qen2, } headers { accept: application/json, text/javascript, */*; q0.01, accept-language: zh-CN,zh;q0.9,en;q0.8,en-GB;q0.7,en-US;q0.6, priority: u1, i, referer: https://spiderdemo.cn/sec1/header_check/, sec-ch-ua: Chromium;v146, Not-A.Brand;v24, Microsoft Edge;v146, 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: sessionidaxqdb7vbszzwf2o6eb1x1a6d1l01qen2, } params { challenge_type: header_check, } all_page_data [] for page_num in range(1, 101): url fhttps://spiderdemo.cn/sec1/api/challenge/page/{page_num}/ response requests.get(url, paramsparams, cookiescookies, headersheaders) 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所有提取的数据:) a0 for i, data in enumerate(all_page_data, 1): print(f{i}. {data}) aadata print(a)