当你在数据采集做爬虫的时候,我们都要用到HTTP协议的GET方法和POST方法。今天我们暂且介绍一下POST方法。也就是把信息推送到网络服务器进行存储和分析。

页面表单基本可以看成一种用户提交POST请求的方式,且这种请求方式是服务器能够理解的,而POST方法一般都被用来认证。正如网站的URL链接可以帮助用户提交GET请求一样,HTML表单可以帮助用户提交POST请求。在python中,我们可以利用一些强大的库来实现我们的目的。

虽然python的标准库也可以控制网页表单,但是还是比较喜欢python的第三方库Requests库。这是极其强大的库,今天我们介绍的也只是其中一部分,它擅长处理那些复杂的HTTP请求,cookie,header(响应头和请求头)等。

Requests的创建者Kenneth Reitz创造的初衷就是要避免我们在工作耗费过多的体力在POST请求方面。可见Requests库的诞生正如python诞生的缘由一样,为了简单!

首先体验下最简单的POST提交,仅仅需要4行代码实现!

import requests
params={'firstname':'cck','lastname':'Mi'}
r=requests.post("http://pythonscraping.com/files/processing.php",data=params)
print(r.text)

这个POST仅仅提交了两个简单的字段,一个是firstname,一个是lastname。虽然极其简单,但是我们通过这几行代码,我们见识了Requests的强大,简单几行代码就搞定了表单的提交!

我们在进行POST提交时通常要注意两点:

1.你想提交数据的字段名称(firstname,lastname)

2.表单的action属性,也就是表单提交后网站会显示的页面(这里是上面代码中第三行中的链接)

如果我们需要提交文件和图片时应该怎么办呢?利用Requests库也只是几行简单的代码。

import requestsfiles={'uploadFile':open('D:\博客相关资料\资料\博客图片\h1.png','rb')}
r=requests.post("http://pythonscraping.com/pages/processing2.php",files=files)
print(r.text)

无论是名字提交,还是上传图片和文件。我们都还没接触到涉及Requests库是怎么处理cookie的。大多数网站都用cookie跟踪用户的登陆状态,一旦网站验证了你的登陆权证,它就会将它们保存在你的浏览器cookie中,里面通常包含一个服务器生成的令牌,登陆有效时限和状态跟踪信息。网站会把这个cookie当作信息验证的证据,在你浏览网站的每个页面时出示给服务器。

用Requests库跟踪cookie也同样简单:

import requests
params={'username':'cck','password':'password'}
r=requests.post("http://pythonscraping.com/pages/cookies/welcome.php",params)
print("Cookie 为:")
print(r.cookies.get_dict())
print("............")
print("被传递cookie的页面是....")
#把cookie传递给下面的页面以保持登陆
r=requests.get("http://pythonscraping.com/pages/cookies/profile.php",cookies=r.cookies)
print(r.text)

请求头在网络请求中也扮演着十分重要的角色,根据请求头的参数响应网站不同的语言版本。因此,你只要简单地把请求头属性从Accept-Language:en-US 修改成Accept-Language:en-fr ,就可以获得网站的法语版本!HTTP协议定义了十几种请求头,但常用的也就7,8个,如果不设置请求头,Python会自动设置User-Agent字段为 Python-urllib/3.4 ,这样你设计的爬虫很容易被拒绝访问网站。所以通常我们需要自己来设置请求头。

import requests
from bs4 import BeautifulSoup
session=requests.Session()
headers={"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML,like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53","Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*,q=0.8"}
r=session.get("https://www.whatismybrowser.com/detect/what-http-headers-is-my-browser-sending",headers=headers)
cck=BeautifulSoup(r.text,"lxml")
print(cck.find("table",{"class":"table-striped"}).get_text)

这样处理对于简单的网页没有问题,但对于复杂的网站,它会自己调整cookie,这时候我们利用session函数来解决这些问题。

import requests
session=requests.Session()
params={'username':'cck','password':'password'}
r=requests.post("http://pythonscraping.com/pages/cookies/welcome.php",params)
print("Cookie is to:")
print(r.cookies.get_dict())
print("............")
print("被传递cookie的页面是....")
r=session.get("http://pythonscraping.com/pages/cookies/profile.php")
print(r.text)

在发明cookie之前,处理网站登陆最常用的方法是HTTP基本接入认证。现在已经凤毛菱角,但在一些安全性较高的网站或者是些API使用上还可能会见到,基本接入认证必须通过用户名和密码才能登陆。

Requests库有一个auth模块专门处理HTTP基本接入认证:

import requests
from requests.auth import AuthBase
from requests.auth import HTTPBasicAuth
auth=HTTPBasicAuth('cck','password')
r=requests.post(url="http://pythonscraping.com/pages/auth/login.php",auth=auth)
print(r.text)

如果在提交表单时遇到一个莫名的错误,或者是被拒绝接入,这就可能涉及到了蜜罐,隐藏字段以及其它保护网站的措施,如果你是开发者,你也不想自己服务器资源都被大量的网络爬虫给占用,但是攻守相辅相成,在以后的文章里我们会慢慢探讨这个问题。

Python的提交表单功能相关推荐

  1. python网页提交表单_使用Python中的POST请求通过网站表单上传基本文件

    我尝试使用Python和HTTP请求在一个随机的网站上上传一个文件.为此,我使用名为Requests的便利库. 根据the documentation,以及StackOverflow here和the ...

  2. python网页提交表单_Html表单——使用python在web页面上显示用户提交的数据

    这个例子展示了如何使用Python完成同样的事情--在web页面上显示提交的数据. 环境配置: win10.Anaconda3 问题: 1.在安装Anaconda3的时候出现了很多问题,经建议安装旧版 ...

  3. python网页提交表单_用Python的urllib库提交WEB表单

    class EntryDemo( Frame ): """Demonstrate Entrys and Event binding""" c ...

  4. Python Django提交表单时报错:Forbidden (403) CSRF verification failed. Request aborted.

    报错截图: 解决方法: 把settings里面一个叫csrf的安全机制的注释掉即可. MIDDLEWARE = ['django.middleware.security.SecurityMiddlew ...

  5. html把保留图片改为提交按钮,如何制作图片按钮,并为图片按钮添加提交表单和重置表单功能...

    网页中有表单,表单的默认按钮样式不是很好看,很多人为了美观使用图片做按钮. 今天中国在 一.图片按钮的制作方法 1. 定义图像形式的提交按钮. 2.用CSS把图片设为按钮的背景 3.作用,设置其bac ...

  6. Python模拟post提交表单数据 ——某二手车网站回拨电话的分析与利用

    Python模拟post提交表单数据 --某二手车网站回拨电话的分析与利用 在浏览某二手车网站的时候,发现可以提交手机号码,然后网站就会回拨给这个手机号,利用这个功能,可以实现一些目的.Python语 ...

  7. button按钮无法提交表单问题发现与解决

    前些天,我在用html制作登录框时遇到一个问题,form表单中的button不能提交表单中的数据. 相信你知道,input的type="submit"有提交表单的功能,当然,我们自 ...

  8. python自动登录并提交表单_用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)...

    老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...

  9. python表单防重复提交_传统方式提交表单,防止重复提交问题?

    提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...

最新文章

  1. ORACLE中的imp和exp
  2. ASML 1nm光刻机研究进展:摩尔定律尚未结束
  3. myeclipse2014如何创建user library
  4. 你应该知道的 RPC 原理
  5. sklearn 特征工程
  6. TomcatNginx源码笔记分析
  7. 哈哈,这个小游戏很有意思!
  8. 【英语学习】【English L06】U07 Jobs L2 I have my own bakery now
  9. 通过SecureCRT访问亚马逊Amazon EC2主机
  10. jquery 获取节点各种方法
  11. 泰山OFFICE技术讲座:WORD光标出错
  12. oracle按序号排序,Oracle排序以及序号的显示
  13. Springboot Web应用中服务器配置参数ServerProperties的加载
  14. 美食杰项目 -- 菜品信息(五)
  15. 普通IPC接入神目爱买系统操作说明(智能人脸抓拍盒利旧方案)
  16. 什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式
  17. 数据库SQL实战 --47.将所有获取奖金的员工当前的薪水增加10%
  18. Firefox 禁止中国用户!!
  19. HDMI特性之Audio Return Channel Control
  20. 华为鸿蒙系统超级终端,华为发布鸿蒙OS Connect 打造鸿蒙硬件“超级终端”概念...

热门文章

  1. python基础数据类型练习2
  2. 网络编程二-LINUX网络IO模型
  3. php数据接受数据,php接收数据
  4. 苹果手机专用计算机,苹果手机的使用
  5. 图集谷-写真集-爬虫-2.0
  6. TeamViewer 14完美中文版
  7. 小技巧: 掀开 Metacity 的同化殊效
  8. 什么是基础设施建设?
  9. DataTable小详解
  10. apriltag linux 编译,无法为python包“apriltag”、“apriltags”和“aruco”构建轮子