猿人学_第13题

本文通过一个实际例子展示了如何利用Python的requests库抓取网页数据,并解析JS设置的cookie来获取所需信息。首先,请求一个JS文件并提取cookie,然后在后续请求中使用这个cookie来加载页面和获取数据。代码中涉及HTTP头部设置、正则表达式匹配及JSON数据处理。整个过程揭示了动态网站数据抓取的常见步骤。
摘要由CSDN通过智能技术生成

在这里插入图片描述
入门cookie

在这里插入图片描述

  • 分析得到,第一个请求返回一个js文件,但是在浏览器中不会对其进行显示
  • 在charles抓包工具中可以看到返回的是一个字符串拼接,是对cookie进行的操作
  • 第二个请求使用上面添加的新的cookie进行页面的请求
  • 第三个请求是对数据的请求,依然用到了上面的cookie,然后再将返回的结果渲染到页面中进行显示

请求了三次13第三个请求才是数据
第一个请求
在这里插入图片描述

其中有set-cookie所以要保持会话
返回结果为一个js代码,可以很简单的看到,其是对document.cookie进行的修改赋值
在这里插入图片描述

到了第二个请求就使用了第一个请求的修改过后的cookie,进行页面的加载
在这里插入图片描述
第三个请求才是真正的数据,页面加载时,只是将其中的值先使用150进行占位,当第三次请求返回时在将数据替换到其中去
刚开始占位时的页面都是用150进行填充

代码如下

# 开发时间 2021/9/6 11:20
# 修改时间 2022/10/16 16:52
import re

import requests

url = 'https://match.yuanrenxue.com/match/13'
headers = {
    'Host': 'match.yuanrenxue.com',
    'Connection': 'keep-alive',
    'sec-ch-ua': '"Chromium";v="106", "Microsoft Edge";v="106", "Not;A=Brand";v="99"',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest',
    'sec-ch-ua-mobile': '?0',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.42',
    'sec-ch-ua-platform': '"Windows"',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Dest': 'empty',
    'Referer': 'https://match.yuanrenxue.com/match/13',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Cookie': 'sessionid=cr0bsa62pjo8ge174tj1usxnfcik8cpa;Hm_lvt_c99546cf032aaa5a679230de9a95c7db=1665887019,1665888460,1665900743; qpfccr=true; no-alert3=true; Hm_lpvt_c99546cf032aaa5a679230de9a95c7db=1665908573;',
}

session = requests.session()
session.headers = headers
response = session.get(url)
text = response.text.replace("('", '').replace("')+", '').replace('<script>', '').replace("'", '')

cookie = re.findall('cookie=(.*?);', text)[0]
session.headers['Cookie'] += cookie

set_cookie = ";" + response.headers['Set-Cookie'].split(';')[0]
res = 0
for page in range(1, 6):
    if page > 3:
        session.headers['User-Agent'] = 'yuanrenxue.project'
        session.headers['Cookie'] += set_cookie
    url = 'https://match.yuanrenxue.com/api/match/13?page={}'.format(page)
    response = session.get(url)
    datas = response.json()['data']
    for data in datas:
        res += data['value']
print(res)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值