Python网络数据采集之登录窗口采集处理|第08天
利用Requests
库处理Cookie
、session
等方式的登录。
登录窗口采集处理
如果我们采集的网站需要我们登录后才能获取我们想要的数据,这就需要进一步处理登录这个问题。
登录的原理很简单,即前台向服务器传输数据进行验证。传输的方式有很多种,例如GET
、POST
;页面表单基本上可以看成是一种用户提交 POST
请求的方式,且这种请求方式是服务器能够理解和使用的。
Python Requests库
除了Python
的标准库urllib
库,还有第三方库可以选择,例如:Requests
。主要擅长处理那些复杂的 HTTP
请求、cookie
、header
(响应头和请求头)等内容的 Python
第三方库。
安装的方式也很简单。例如pip
安装,或者下载源码安装。
源码地址:https://github.com/kennethreitz/requests/tarball/master
提交表单
提交表单一般是HTML
的方式可以实现,且大多也采用这样的方式进行提交。例如:
<form method="post" action="processing.php">
Nickename: <input type="text" name="nickename"><br>
username: <input type="text" name="username"><br>
<input type="submit" value="Submit">
</form>
我们Python
的用Requests
库来提交十分简单。
import requests
params = {'name': 'Ryan', 'username': 'Mitchell'}
r = requests.post("http://pythonscraping.com/files/processing.php", data=params)
print(r.text)
单选按钮、复选框等输入
无论表单的字段看起来多么复杂,仍然只有两件事是需要关注的:字段名称和值。字段名称可以通过查看源代码寻找name
属性轻易获得。而字段的值有时会比较复杂,有可能是在表单提交之前通过 JavaScript
生成的。
我们可以通过抓包或者浏览器的网络请求信息来判断,例如:
1 |
https:chensenlin.cn?c=hello&m=senlin |
---|
Python
需要理解为:
1 |
{'c':'hello','m':'senlin'} |
---|
具体查看方法可以参考下图所示:
提交文件或者图像
HTML
提交文件的时候,需要添加一个参数enctype="multipart/form-data"
,声明这是文件上传的类型。同时input
的type
为file
。
<from action="uploadFile.php" metoh="post" enctype="multipart/form-data">
uploadFile:<input type="file" name="filename">
提交:<input type="submit" value="上传">
</from>
同理,Python Requests
库对这种表单的处理方式如下:
import requests
files = {'uploadFile': open('../files/Python-logo.png', 'rb')}
r = requests.post("https:chensenlin.cn?c=filename&m=upload",files=files)
print(r.text)
处理登录和Cookie
网站大多都用 cookie
跟踪用户是否已登录的状态信息。一旦网站验证了你的登录权证,它就会将它们保存在你的浏览器的 cookie
中,里面通常包含一个服务器生成的令牌、登录有效时限和状态跟踪信息。网站会把这个cookie
当作信息验证的证据,在你浏览网站的每个页面时出示给服务器。
根据我们上面的逻辑用Requests
库跟踪cookie
的代码示例也比较简单:
import requests
params = {'username': 'demochen', 'password': 'password'}
r = requests.post("http://pythonscraping.com/pages/cookies/welcome.php", params)
print("Cookie is set to:")
print(r.cookies.get_dict())
print("-----------")
print("Going to profile page...")
r = requests.get("http://pythonscraping.com/pages/cookies/profile.php",cookies=r.cookies)
print(r.text)
不过也有session
的方式进行登录,但是Requests
库的session
函数处理也很方便。具体和cookie
类似,不过多阐述,或者查看文档了解也可以。
import requests
session = requests.Session()
params = {'username': 'username', 'password': 'password'}
s = session.post("http://pythonscraping.com/pages/cookies/welcome.php", params)
print("Cookie is set to:")
print(s.cookies.get_dict())
print("-----------")
print("Going to profile page...")
s = session.get("http://pythonscraping.com/pages/cookies/profile.php")
print(s.text)
值得注意的是,登录还有一种是用HTTP
基本接入认证的方式。Requests
库有一个 auth
模块专门用来处理 HTTP
认证:
import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth
auth = HTTPBasicAuth('ryan', 'password')
r = requests.post(url="http://pythonscraping.com/pages/auth/login.php", auth=
auth)
print(r.text)
- 使用Identity Server 4建立Authorization Server (6) - js(angular5) 客户端
- 如何实现超高并发的无锁缓存?
- 使用Identity Server 4建立Authorization Server (5)
- 多库多事务降低数据不一致概率
- 利用Python实现DGA域名检测
- 一个“爆款”成功的API,都离不开这8条设计准则
- RavenDb学习(八)高级特性上半部分
- 微信钱包中58到家首页为什么这么快
- hbase源码系列(二)HTable 探秘
- hbase源码系列(三)Client如何找到正确的Region Server
- hbase源码系列(五)Trie单词查找树
- 如何在特定的渗透测试中使用正确的Burp扩展插件
- hbase源码系列(十一)Put、Delete在服务端是如何处理?
- 大数据如何帮飞机节油?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 爬虫+tkinter界面 实现历史天气查询
- python opencv+pytesseract 验证码识别
- python+opencv 实现图像人脸检测及视频中的人脸检测
- 手搓一个分布式大气监测系统(五)基于物联网开发平台的云架构延伸
- 关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!
- 图解EfficientNet模型的完整细节
- (⊙o⊙)?markdown文档中插入萌萌的emoji表情
- C语言中的字符串可以怎么处理?
- 一个简单的C语言测试框架
- Let's Encrypt实践指北
- MassTransit Get Started->
- 一次性把所有普通和经典的网页布局讲得通通透透的,多图预警,建议收藏
- Github标星 8K+,免费又好用的Redis客户端工具!
- Python判断字符串是否包含特定子串的7种方法
- 用后台开发的逻辑理念学习VUE