Python 爬虫 | 猿人学第十三题

今天讲猿人学第十三题,这题是入门级的cookie反爬


地址:

match.yuanrenxue.com/ma


目录:

1、环境

2、分析请求

3、实现爬取

1、环境

Python3.7、pyexecjs、requests


2、分析请求

e901dd10fa5cca275414996d8f39325d.jpeg
图2-1

第一步找到数据接口如图2-1,同时我们可以看到有三个一样的请求,初步判断可能是cooike反爬(当然题目也告诉我们了),我们也可以请求的时候请求头先不带cookie,验证一下很快就可以知道是cookie反爬了。那第一个请求就应该是向服务器获取一个cookie。这里用Charles抓包,因为Chrome无法显示返回的情况,如图2-2。

5869aa266bcb1e5555bf5e68158dc3cf.jpeg
图2-2

f99af835c03148d85e0bdabd1a83879c.jpeg
图2-3

可以看到返回的是一段由script标签包裹的字符串,复制到开发者工具的Console看看是什么效果,把script标签和如图2-4的最后一段字符串删掉。

55749e9872fa3e55875fb18274214225.jpeg
图2-4

98625b7d6b3068cb8bb01c9e65c4c07a.png
图2-5

效果如图2-5,也就是将()中的字符相加而已,直接正则就好了。


3、实现爬取

import re
import requests


cookie = {
    'Cookie': '放入你的sessionID'
}
headers = {
    "User-Agent": "yuanrenxue.project",
}

url = 'http://match.yuanrenxue.com/match/13'
session = requests.Session()
response = session.get(url=url, headers=cookie)
com = re.compile("('(?P<cookie>.?)')")
ret = com.finditer(response.text)
cookie = ''
for i in ret:
    cookie += i.group('cookie')
key, value = cookie.split('=')
session.cookies.set(key, value)

sum_list = []
for page in range(1, 6):
    api_url = f'http://match.yuanrenxue.com/api/match/13?page={page}'
    ret = session.get(api_url, headers=headers)
    for i in ret.json()['data']:
        sum_list.append(i['value'])
print(sum(sum_list))

这里要讲一下如果你要登陆填答案的话需要把你的sessionID填入,在第一次请求就要把sessionID加入中cookie,这样才可以拿到正确的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值