使用Python+requests简单实现模拟登录以及抓取接口数据

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。使用Python+requests简单实现模拟登录以及抓取接口数据,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言:说起爬虫这个东西,大学时我习惯用PHP+CURL来实现,后来用Java+WebMagic来实现。如今刚接触一下Python,开始了解一下Python的语法和框架等,以及用Python来做一些HTTP请求,发现在功能实现上,相比PHP和Java,其更加方便、简洁、高效。

本例子的服务端是基于Session来和客户端保持会话连接的,也就是说每个客户端首次访问服务端时,服务端都会为其开启一个Session,只要客户端的Cookie信息不被用户清空,或者服务端重启,又或者此Session保持长时间有效,之后的访问,多少次都是同一个Session,并存于服务器内存中。

下面就以Python的requests依赖库来实现一个客户端模拟登录。

环境:

Python => 3.11.2
urllib3 => 1.26.15

index.py

#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import requests
import json
import urllib3

urllib3.disable_warnings()  # InsecureRequestWarning: Unverified HTTPS request is being made to host 'xxx'. Adding certificate verification is strongly advised.

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

# 打印前后的请求标头
headers = {
    "Content-Type": 'application/json',
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"
}
print('原 session 的请求标头' + str(session.headers))
session.headers = headers
print('新 session 的请求标头' + str(session.headers))

# 更新为使用账号密码登录成功的 session 对象
url = 'https://xxx.com/api/login'  # 登录接口
data = {
    'username': '',
    'password': ''
}
response = session.post(url, data=json.dumps(data), headers=headers, verify=False)

if response.status_code == 200:
    print('尊敬的用户,' + '您已模拟登录 成功~')
    print(response.text)
    print(response.cookies)
else:
    print('模拟登录 失败!')
print('\n')

# 爬取 getUserList 接口数据
userListUrl = 'https://xxx.com/api/getUserList'  # 目标接口
response = session.get(userListUrl, headers=headers, cookies={}, verify=False)

if response.status_code == 200:
    print('爬取接口 成功~')
    print(response.text)
else:
    print('爬取接口 失败!')

效果:

D:\Python3.11\python.exe D:\workspace\python3_django4_web\python3_django4_web\simulated_client\index.py 

原 session 的请求标头{'User-Agent': 'python-requests/2.28.2', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}
新 session 的请求标头{'Content-Type': 'application/json', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36'}

尊敬的XXX用户,您已模拟登录 成功~
{"success":true,"statusCode":200,"data":"..."}
<RequestsCookieJar[...]>


爬取接口 成功~
{"success":true,"statusCode":200,"data": [...]}

Process finished with exit code 0

参考资料:

JSESSIONID的简单说明_hzm326的博客-CSDN博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/151126.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!