Python网络数据采集4-POST提交与Cookie的处理
Python网络数据采集4-POST提交与Cookie的处理
POST提交
之前访问页面都是用的get
提交方式,有些网页需要登录才能访问,此时需要提交参数。虽然在一些网页,get
方式也能提交参。比如https://www.some-web-site.com?param1=username¶m2=age
就能直接访问该网页。但是在登录这种需要安全性的地方。还是通过表单提交的方式好。此时就需要用到post
提交了。这在requests
库中特别简单。指定data参数就行了。
表单提交例子这个网页有个表单。
<form action="processing.php" method="post">
First name: <input name="firstname" type="text"><br>
Last name: <input name="lastname" type="text"><br>
<input id="submit" type="submit" value="Submit">
</form>
method
属性里可以看到提交方式是POST。action
属性里可以看到,我们表单提交后实际上会转到processing.php
这个页面进行表单处理。所以我们应该访问这个页面,进行表单参数的传递。
在往requests的data传入参数的时候,注意对应input
标签的name属性就行。他们分别是firstname
、lastname
。
import requests
url = 'https://pythonscraping.com/pages/files/processing.php'
params = {'firstname': 'Sun', 'lastname': 'Haiyu'}
r = requests.post(url, data=params, allow_redirects=False)
print(r.text)
Hello there, Sun Haiyu!
上传文件
虽然在爬虫中,上传文件几乎用不到。但是有必要了解下基本用法。使用requests
的files
参数就可以轻松实现。
这个网页可以上传图片。同样是一个表单。
<form action="processing2.php" enctype="multipart/form-data" method="post">
Submit a jpg, png, or gif: <input name="uploadFile" type="file"><br>
<input type="submit" value="Upload File">
</form>
和上面例子一样,我们需要访问的实际页面是processing2.php
,提交方法依然是POST。参数name为uploadFile
。
import requests
url = 'https://pythonscraping.com/pages/files/processing2.php'
files = {'uploadFile': open('abc.PNG', 'rb')}
r = requests.post(url, files=files)
print(r.text)
Sorry, there was an error uploading your file.
代码是没有问题的,而且在浏览器里是上传也是这个结果。估计书中提供的网址有问题吧...
处理登录和Cookie
Cookie用来跟踪用户是否已经登录的状态信息。一旦网站认证了我们的登录,就会将cookie存到浏览器中,里面包含了服务器生成的令牌、登录有效时长、状态跟踪信息。当登陆有效时长达到,我们的登录状态就被清空,想要访问其他需要登录后才能访问的页面也就不能成功了。还是先登录,然后获取cookie。
<form action="welcome.php" method="post">
Username (use anything!): <input name="username" type="text"><br>
Password (try "password"): <input name="password" type="password"><br>
<input type="submit" value="Login">
</form>
可以看到,登录后会进入welcome.php
,输入账号和密码(账号任意, 密码必须是password)。
登录成功后,可以使用get方式访问简介页面
注意由于requests.get('https://pythonscraping.com/pages/cookies/profile.php')
不会知道我们“已经登录了”这个状态,所以直接访问是不行的。但是若是传入登录成功后得到的cookie,这个信息让浏览器知道我已经登录,所以请给我看profile.php
,浏览器看到这个令牌就会同意。
import requests
url = 'https://pythonscraping.com/pages/cookies/welcome.php'
params = {'username': 'Ryan', 'password': 'password'}
r = requests.post(url, params)
print(r.cookies.get_dict())
res = requests.get('https://pythonscraping.com/pages/cookies/profile.php', cookies=r.cookies)
print(res.text)
{'loggedin': '1', 'username': 'Ryan'}
Hey Ryan! Looks like you're still logged into the site!
其他登录认证方式
还有一些登录认证方式,比如HTTP基本接入认证。使用requests
的auth
参数。
import requests
url = 'https://pythonscraping.com/pages/auth/login.php'
res = requests.get(url, auth=('sun', '123456'))
print(res.text)
<p>Hello sun.</p><p>You entered 123456 as your password.</p>
像上面那样,向auth传入一个含有两个元素的元组,分别是账号和密码。
by @sunhaiyu
2017.7.17
Python网络数据采集4-POST提交与Cookie的处理的更多相关文章
- 笔记之Python网络数据采集
笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...
- Python网络数据采集6-隐含输入字段
Python网络数据采集6-隐含输入字段 selenium的get_cookies可以轻松获取所有cookie. from pprint import pprint from selenium imp ...
- Python网络数据采集PDF高清完整版免费下载|百度云盘
百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5 内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...
- Python网络数据采集7-单元测试与Selenium自动化测试
Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
- [python] 网络数据采集 操作清单 BeautifulSoup、Selenium、Tesseract、CSV等
Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesseract.CSV等 Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesse ...
- Python网络数据采集2-wikipedia
Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...
- Python网络数据采集1-Beautifulsoup的使用
Python网络数据采集1-Beautifulsoup的使用 来自此书: [美]Ryan Mitchell <Python网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...
- Python网络数据采集PDF
Python网络数据采集(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/16c4GjoAL_uKzdGPjG47S4Q 提取码:febb 复制这段内容后打开百度网盘手 ...
随机推荐
- 深入浅出 spring-data-elasticsearch - 基本案例详解(三
『 风云说:能分享自己职位的知识的领导是个好领导. 』运行环境:JDK 7 或 8,Maven 3.0+技术栈:SpringBoot 1.5+, Spring Data Elasticsearch ...
- Normalize.css介绍,作用,使用方法
介绍 Normalize.css 是一个很小的CSS文件(V5.0.0版本大小8KB),但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.c ...
- 远程调用其它站点并设置cookie
远程调用其它站点并设置cookie: 参考js var domainArray = [ {site:'g.com',action:'/b.do?c' } ,{site:'www.baidu.com', ...
- sqlserver 复制表结构(可以含有数据 或 只要表结构)
sqlserver 复制表结构(可以含有数据 或 只要表结构) SELECT * INTO bb FROM aa(NOLOCK) WHERE 1=0
- nodejs模块学习: connect解析
nodejs模块学习: connect解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来解决 ...
- H5 data-*容易忽略的问题
H5添加了data-*属性,非常方便 但经常忽略小写的问题, H5要求属性名全部小写,驼峰式命名的习惯掉坑了 测试代码如下: <html> <head> <script ...
- nodejs模块学习: connect2解析
nodejs模块学习: connect2 解析 nodejs 发展很快,从 npm 上面的包托管数量就可以看出来.不过从另一方面来看,也是反映了 nodejs 的基础不稳固,需要开发者创造大量的轮子来 ...
- Java IO学习笔记(二)缓冲流
处理流:包在别的流上的流,可以对被包的流进行处理或者提供被包的流不具备的方法. 一.缓冲流:套接在相应的节点流之上,带有缓冲区,对读写的数据提供了缓冲的功能,提高读写效率,同时增加一些新的方法.可以减 ...
- 安装WIA组件
下载地址: http://pan.baidu.com/s/1bnGU5Nx 安装方法: 将下载后的WIAAutSDK.zip解压,复制wiaaut.dll到C:\Windows\System32,注册 ...
- //读取配置文件(属性文件)的工具类-ConfigManager
package com.pb.news.util; import java.io.IOException;import java.io.InputStream;import java.sql.Resu ...