Python网络数据采集4-POST提交与Cookie的处理

POST提交

之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数。虽然在一些网页,get方式也能提交参。比如https://www.some-web-site.com?param1=username&param2=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属性就行。他们分别是firstnamelastname

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!

上传文件

虽然在爬虫中,上传文件几乎用不到。但是有必要了解下基本用法。使用requestsfiles参数就可以轻松实现。

这个网页可以上传图片。同样是一个表单。

<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基本接入认证。使用requestsauth参数。

这个页面需要输入账号和密码登录

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的处理的更多相关文章

  1. 笔记之Python网络数据采集

    笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...

  2. Python网络数据采集6-隐含输入字段

    Python网络数据采集6-隐含输入字段 selenium的get_cookies可以轻松获取所有cookie. from pprint import pprint from selenium imp ...

  3. Python网络数据采集PDF高清完整版免费下载|百度云盘

    百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5   内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...

  4. Python网络数据采集7-单元测试与Selenium自动化测试

    Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...

  5. Python网络数据采集3-数据存到CSV以及MySql

    Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...

  6. [python] 网络数据采集 操作清单 BeautifulSoup、Selenium、Tesseract、CSV等

    Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesseract.CSV等 Python网络数据采集操作清单 BeautifulSoup.Selenium.Tesse ...

  7. Python网络数据采集2-wikipedia

    Python网络数据采集2-wikipedia 随机链接跳转 获取维基百科的词条超链接,并随机跳转.可能侧边栏和低栏会有其他链接.这不是我们想要的,所以定位到正文.正文在id为bodyContent的 ...

  8. Python网络数据采集1-Beautifulsoup的使用

    Python网络数据采集1-Beautifulsoup的使用 来自此书: [美]Ryan Mitchell <Python网络数据采集>,例子是照搬的,觉得跟着敲一遍还是有作用的,所以记录 ...

  9. Python网络数据采集PDF

    Python网络数据采集(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/16c4GjoAL_uKzdGPjG47S4Q 提取码:febb 复制这段内容后打开百度网盘手 ...

随机推荐

  1. centos ios镜像文件 安装详细

    1.挂载iOS镜像(先打开VM 选择虚拟机---->设置-->CD ---->使用ISO镜像文件 用浏览打开) 2.开始界面选择 3出现下面的界面 这是提示你是否扫描文件的完整性 我 ...

  2. centos7下创建数据库和用户

    首先需要在centos系统下安装好mysql,这个我已经安装好了,这里就不把过程贴出来了. 第一步:使用root用户登录到mysql数据库: 第二步:创建一个mysql数据库.当第一步登录成功后,便会 ...

  3. 关于MATLAB处理大数据坐标文件2017526

    运行六个特征,提高了3分,也就是说以前做的特征已经用完了,穷途末路,依靠以前的特征已经很难取得进步了,提出以下建议 1.测试集曾经运行错误的数据尽早画出图形,并尽可能发现问题并提出特征 2.运行其他程 ...

  4. Css3视频教程下载

    本套教程主要讲解了大量的CSS3新功能,包括: 边框.圆角.背景.渐变.阴影.文本特效.2D/3D转换.过渡.动画.伪类元素的使用等,同时伴随了大量的实例制作,比如CSS3实现红心的制作,火焰字.多彩 ...

  5. zepto的使用方法

    有些不了解zepto的同学在刚接触的时候肯定有很多疑惑,这个东西怎么用啊,去哪里下载啊,什么时候该用什么时候不该用啊,其实我以前也是这样的.jquery使用多了那么就让我们一起来了解下zepto把. ...

  6. Appcan开发笔记:结合JQuery的$.Deferred()完善批量异步发送

    appcan的 uexXmlHttpMgr.send 或者 appcan.ajax无法同步请求(没有找到这个属性),只能异步,造成循环多次提交时由于延迟或网络堵塞等原因无法同步响应,导致提交顺序混乱, ...

  7. 团队开发冲刺2-----2day

    冲刺目标: 1.在第一阶段的基础上完成app内部界面设计. 2.逐步完成app内每一部分内容. 3.对app的实现进一步仔细钻研考虑. 4.对app每一部分内容模块化,分工在进一步明确. 5.设计好数 ...

  8. Android如何实现定位获取

    一:GPS定位: (1).要实用Adnroid平台的GPS设备,首先需要添加上权限,所以需要添加如下权限: uses-permission android:name= android.permissi ...

  9. 设备像素比dpr介绍

    首先介绍一下概念 devicePixelRatio其实指的是window.devicePixelRatio window.devicePixelRatio是设备上物理像素和设备独立像素(device- ...

  10. C#基础:.NET环境下WebConfig的加密

    在将ASP.NET项目部署到服务器上时,内网环境下Web.Config往往是直接复制过去.对于外网环境,则需要对Web.Config文件进行加密. .NET环境下一共提供了2种方式的加密功能,分别是D ...