Java_S 发表于 2020-12-31 18:33

Python反反爬之访问逻辑---推心置腹

# 写在前面
Python反反爬系列

1.
2.

这次的题目相比于前两次的题目简单一些,话不多说,我们直接开整

## 题目
![]
题目网址,[点我去刷题]
抓取下列5页商标的数据,并将出现频率最高的申请号填入答案中

## 分析网页
老规矩,我们还是首先打开刷题网站,接着打开谷歌调试工具
查看【XHR】里面的内容
![]
跟前两道题是一样的,数据都是通过ajax传递的,我们也不用去打开这个网址了
经过前面两道题的经验,直接打开肯定是不行的
我们来到【ALL】里面,查看一下所有的请求
![]
我们可以看到有两个名为【3】的请求,但是这两个是不一样的
第一个的url是:http://match.yuanrenxue.com/match/3,也就是题目的这个网址
第二个的url是:http://match.yuanrenxue.com/api/match/3,是网页数据来源的网址
根据我们第二题的经验可能会去对比两个名字相同的请求,但是在这道题里面,可比性不大

那么就点击数据来源的网址,看看请求的一些信息
![]
可以发现有一条【Set-Cookie】的信息,很特别

查看前面的几条请求,可以发现,只有红色方框请求有这个值,连第一个名为【3】的请求也没有
![]

那么,我们就可以推测,是不是这个名为【logo】的请求动了什么手脚
我们点击页面的下一页,看看有没有新的变化
![]
可以发现,名为【logo】的请求又出现了,而且每次都是在网页数据来源请求之前
那么,这道题目的逻辑就很清楚了,要想正常的拿到网页数据,就必须先访问【logo】这个请求

## 【logo】到底做了什么
![]
我们查看【logo】这个请求,也没有发现JS的代码,平平无奇
所以,我们可以大胆的做这个猜测

1. 首先访问http://match.yuanrenxue.com/logo,在响应头中取得sessionid的值
2. 接着再去访问网页数据来源的网址

## 验证猜想
```python
import requests

# 实例化session
session = requests.session()

# 设置请求头,必须这么写,不然会请求失败,
# 具体原因我也不是很知道,如果有大佬知道的话,可以分享一下
headers = { 'Connection': 'keep-alive',
            'User-Agent': 'yuanrenxue.project',
            'Accept': '*/*',
            'Origin': 'http://match.yuanrenxue.com',
            'Referer': 'http://match.yuanrenxue.com/match/3',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
         }
# 名为【logo】请求的url
url = 'http://match.yuanrenxue.com/logo'
# 设置请求头数据
session.headers = headers
# 使用session发起请求
response = session.post(url=url)

url_api = f'http://match.yuanrenxue.com/api/match/3'
res = session.get(url=url_api).json()
# 成功获取到数据,猜想成功
print(res)
#{'status': '1', 'state': 'success',
# 'data': [{'value': 2838}, {'value': 7609}, {'value': 8717},
# {'value': 6923}, {'value': 5325}, {'value': 4118}, {'value': 8884},
# {'value': 8717}, {'value': 2680}, {'value': 3721}]}
```
通过这样的方式,我们如愿以偿地拿到了数据,我们就可以愉快地写Python代码解答题目啦

## 解出答案
```python
# @BY   :Java_S
# @Time   :2020/12/31 15:45
# @Slogan :够坚定够努力大门自然会有人敲,别怕没人赏识就像三十岁的梵高

import requests
import pandas as pd

def get_data(page_num):
    session = requests.session()

    headers = { 'Connection': 'keep-alive',
                'User-Agent': 'yuanrenxue.project',
                'Accept': '*/*',
                'Origin': 'http://match.yuanrenxue.com',
                'Referer': 'http://match.yuanrenxue.com/match/3',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'zh-CN,zh;q=0.9,en-GB;q=0.8,en;q=0.7',
               }
    url = 'http://match.yuanrenxue.com/logo'
    session.headers = headers
    response = session.post(url=url)

    url_api = f'http://match.yuanrenxue.com/api/match/3?page={page_num}'
    res = session.get(url=url_api).json()
    data = for i in res['data']]
    return data


if __name__ == '__main__':
    data = []
    for i in range(1,6):
      data_list = get_data(i)
      data.extend(data_list)
    count = pd.value_counts(data)
    print(count)
```
![]

这次的题目是:统计出现频率最高的申请号,因为我之前学过Pandas,所以直接用了里面的函数得出答案

最后提前祝大家新年快乐,这个系列,明年继续更新!

: https://www.52pojie.cn/thread-1337317-1-1.html
: https://www.52pojie.cn/thread-1339239-1-1.html
: https://syjun.vip/usr/uploads/2020/12/2477449326.jpg
: http://match.yuanrenxue.com/match/3
: https://syjun.vip/usr/uploads/2020/12/2023583190.jpg
: https://syjun.vip/usr/uploads/2020/12/3966772207.jpg
: https://syjun.vip/usr/uploads/2020/12/55395977.jpg
: https://syjun.vip/usr/uploads/2020/12/3398747645.jpg
: https://syjun.vip/usr/uploads/2020/12/3159082667.jpg
: https://syjun.vip/usr/uploads/2020/12/2432555906.jpg
: https://syjun.vip/usr/uploads/2020/12/3790940.jpg

Java_S 发表于 2021-1-2 14:47

可控核聚变 发表于 2021-1-2 13:24
这两天一直在看你的这三个项目,虽然有很多还不明白,但是也受益匪浅,感谢!

感谢支持

chhzll 发表于 2020-12-31 18:46

跨年快乐

祈愿啊 发表于 2020-12-31 19:44

跨年快乐~

lian52yy 发表于 2020-12-31 20:02

谢谢楼主分享教学,元旦好~

hj170520 发表于 2020-12-31 20:16

顶一个,元旦快乐呀

hshcompass 发表于 2020-12-31 20:17

新年快乐

Jack-yu 发表于 2020-12-31 21:34

好小子,又是你,不来点rap节目?{:301_986:}

Java_S 发表于 2020-12-31 22:34

Jack-yu 发表于 2020-12-31 21:34
好小子,又是你,不来点rap节目?

哈哈哈,明年肯定会有的

welcome7758521 发表于 2021-1-1 10:17

我收藏了会好好学习的

寒冰流火 发表于 2021-1-1 14:40

小白的代码功力浅只跟大佬学下感谢楼主了新年快乐
页: [1] 2
查看完整版本: Python反反爬之访问逻辑---推心置腹