今天讲猿人学第十三题,这题是入门级的cookie反爬
地址:
http://match.yuanrenxue.com/match/12
目录:
1、环境
2、分析请求
3、实现爬取
1、环境
Python3.7、pyexecjs、requests
2、分析请求
![e901dd10fa5cca275414996d8f39325d.jpeg](https://i-blog.csdnimg.cn/blog_migrate/6f615f8ae9551117d614dbff6ee80d31.jpeg)
第一步找到数据接口如图2-1,同时我们可以看到有三个一样的请求,初步判断可能是cooike反爬(当然题目也告诉我们了),我们也可以请求的时候请求头先不带cookie,验证一下很快就可以知道是cookie反爬了。那第一个请求就应该是向服务器获取一个cookie。这里用Charles抓包,因为Chrome无法显示返回的情况,如图2-2。
![5869aa266bcb1e5555bf5e68158dc3cf.jpeg](https://i-blog.csdnimg.cn/blog_migrate/32b29a1c9452c258ef74b89bc7b07328.jpeg)
![f99af835c03148d85e0bdabd1a83879c.jpeg](https://i-blog.csdnimg.cn/blog_migrate/cf221d8b8e99138fb6d8cf89d1e0fd34.jpeg)
可以看到返回的是一段由script标签包裹的字符串,复制到开发者工具的Console看看是什么效果,把script标签和如图2-4的最后一段字符串删掉。
![55749e9872fa3e55875fb18274214225.jpeg](https://i-blog.csdnimg.cn/blog_migrate/70d3d9a86a23eb14fe70d4fee0786e5f.jpeg)
![98625b7d6b3068cb8bb01c9e65c4c07a.png](https://i-blog.csdnimg.cn/blog_migrate/16eae88e9d6bcc933926156ca639b954.png)
效果如图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,这样才可以拿到正确的数据。