网站首页 > 技术文章 正文
我用 python 做爬虫爬过不少数据,比如在 google play 爬应用信息;在 instragram, 500px 爬图片;当然爬虫的作用不止于此,比如定时去某个网站签到,妈妈再也不用担心我忘记签到了
这些网站支持游客访问,但要访问特定内容,比如你收藏的图片,或者要签到,那前提是要登录。
现在的网站登录验证是越来越复杂了,且不说那些真人都挠头的验证码,就算是不需要验证码的网站,也各出奇招,像 gitee 是通过前端加密登录信息,而 instagram 则是通过 url 里的 query_hash 以及 header 里的 X-CSRFToken,X-Instagram-GIS 来做校验,对爬虫很不友好,都不是那么容易登录进去的
直接发送账号密码到登录接口
有些淳朴的网站,其登录校验只要提供帐号密码就行,通过浏览器抓包看下数据格式,然后照样发起请求,就可以了
比如 500px,其登录验证几乎没有难度,代码如下
# -*- coding: utf-8 -*-
import requests
import json
from profile import email, password
session = requests.session()
if __name__ == '__main__':
url = 'https://api.500px.com/v1/session'
data = {
'session':
{
'email': email,
'password': password
}
}
headers = {'Content-Type': 'application/json'}
result = session.post(url, data=json.dumps(data), headers=headers)
print(result.text)
登录成功后,网站会向客户端写入 cookie,后续访问就一路畅通了,在 python 里则意味着我们需要用 session 发起后续请求
复杂的登录校验
这次以 gitee 为例,来研究下如何登录,先用浏览器抓包看下 gitee 的登录
可以看到要登录 gitee,请求参数里有 authenticity_token 和 加密后的 password
这个 token 怎么来的?根据经验判断应该是藏在 gitee 登录页某处,感觉不难获取;关键是这个 password 的加密,应该是某个 js 脚本的功劳,不过要逆向出 js 是如何加密的,的确是非常困难的。。。毕竟我们不是 js 执行引擎
如果无法逆向出这个加密算法,要怎么登录呢?可以先用浏览器登录,再把 cookie 复制出来给爬虫使用
首先是复制 cookie,浏览器登录 gitee 成功后,随意抓个包就可以得到 cookie 了
复制下来的 cookie 设置到爬虫里,代码如下
# -*- coding: utf-8 -*-
import requests
session = requests.session()
if __name__ == '__main__':
headers = {
'Host': 'gitee.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
'Accept': 'application/json',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
}
url = 'https://gitee.com/api/v3/internal/my_resources'
result = session.get(url=url, headers=headers)
if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)
headers['Cookie'] = '......'
result = session.get(url=url, headers=headers)
if result.status_code == 200:
print('success: \n%s' % (result.text))
else:
print(result.status_code)
执行结果如下
// 未设置 cookie 返回 401
401
// 设置 cookie 后返回数据
success:
{"enterprises_count":0...}
可见,使用浏览器的 cookie 就可以达到爬虫免登录的效果了
程序自动获取 cookie
浏览器抓包再复制 cookie 到爬虫代码,感觉有点 low,实际上 cookie 是保存在我们电脑上的,这样浏览器才能做到记住登录状态功能
那么可以让爬虫自己读取浏览器 cookie,从而避免我们抓包再复制吗?答案是肯定的,考虑到文章篇幅,我将在下一篇文章里介绍如何用代码读取浏览器已存储 cookie 来进行登录,敬请期待
猜你喜欢
- 2025-03-30 奥力给!可以自己定义流程的图形化爬虫&自动化测试平台—Kspider
- 2025-03-30 Java爬虫原理(小白也能懂)(java爬虫入门)
- 2025-03-30 手把手教你用 node 写一个爬虫(node做爬虫)
- 2025-03-30 零基础上手秒杀系统:抢购接口隐藏 + 单用户限制频率
- 2025-03-30 使用CefSharp和Javascript实现网络爬虫
- 2025-03-30 安全知识丨关于网络爬虫的基础讲解
- 2025-03-30 细说小白学python爬虫过程中常见的反爬措施及解决思路(干货)
- 2025-03-30 「数据分析」2种常见的反爬虫策略,信息验证和动态反爬虫
- 2025-03-30 爬虫原理和流程(爬虫程序原理)
- 2025-03-30 python:最简单爬虫之爬取小说网Hello wrold
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)