Python的提交表单功能
当你在数据采集做爬虫的时候,我们都要用到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的提交表单功能相关推荐
- python网页提交表单_使用Python中的POST请求通过网站表单上传基本文件
我尝试使用Python和HTTP请求在一个随机的网站上上传一个文件.为此,我使用名为Requests的便利库. 根据the documentation,以及StackOverflow here和the ...
- python网页提交表单_Html表单——使用python在web页面上显示用户提交的数据
这个例子展示了如何使用Python完成同样的事情--在web页面上显示提交的数据. 环境配置: win10.Anaconda3 问题: 1.在安装Anaconda3的时候出现了很多问题,经建议安装旧版 ...
- python网页提交表单_用Python的urllib库提交WEB表单
class EntryDemo( Frame ): """Demonstrate Entrys and Event binding""" c ...
- Python Django提交表单时报错:Forbidden (403) CSRF verification failed. Request aborted.
报错截图: 解决方法: 把settings里面一个叫csrf的安全机制的注释掉即可. MIDDLEWARE = ['django.middleware.security.SecurityMiddlew ...
- html把保留图片改为提交按钮,如何制作图片按钮,并为图片按钮添加提交表单和重置表单功能...
网页中有表单,表单的默认按钮样式不是很好看,很多人为了美观使用图片做按钮. 今天中国在 一.图片按钮的制作方法 1. 定义图像形式的提交按钮. 2.用CSS把图片设为按钮的背景 3.作用,设置其bac ...
- Python模拟post提交表单数据 ——某二手车网站回拨电话的分析与利用
Python模拟post提交表单数据 --某二手车网站回拨电话的分析与利用 在浏览某二手车网站的时候,发现可以提交手机号码,然后网站就会回拨给这个手机号,利用这个功能,可以实现一些目的.Python语 ...
- button按钮无法提交表单问题发现与解决
前些天,我在用html制作登录框时遇到一个问题,form表单中的button不能提交表单中的数据. 相信你知道,input的type="submit"有提交表单的功能,当然,我们自 ...
- python自动登录并提交表单_用python模拟登录(解析cookie + 解析html + 表单提交 + 验证码识别 + excel读写 + 发送邮件)...
老婆大人每个月都要上一个网站上去查数据,然后做报表. 为了减轻老婆大人的工作压力,所以我决定做个小程序,减轻我老婆的工作量. 准备工作 1.tesseract-ocr 这个工具用来识别验证码,非常好用 ...
- python表单防重复提交_传统方式提交表单,防止重复提交问题?
提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...
最新文章
- ORACLE中的imp和exp
- ASML 1nm光刻机研究进展:摩尔定律尚未结束
- myeclipse2014如何创建user library
- 你应该知道的 RPC 原理
- sklearn 特征工程
- TomcatNginx源码笔记分析
- 哈哈,这个小游戏很有意思!
- 【英语学习】【English L06】U07 Jobs L2 I have my own bakery now
- 通过SecureCRT访问亚马逊Amazon EC2主机
- jquery 获取节点各种方法
- 泰山OFFICE技术讲座:WORD光标出错
- oracle按序号排序,Oracle排序以及序号的显示
- Springboot Web应用中服务器配置参数ServerProperties的加载
- 美食杰项目 -- 菜品信息(五)
- 普通IPC接入神目爱买系统操作说明(智能人脸抓拍盒利旧方案)
- 什么是4:4:4、4:2:2、4:2:0?了解图像压缩取样的方式
- 数据库SQL实战 --47.将所有获取奖金的员工当前的薪水增加10%
- Firefox 禁止中国用户!!
- HDMI特性之Audio Return Channel Control
- 华为鸿蒙系统超级终端,华为发布鸿蒙OS Connect 打造鸿蒙硬件“超级终端”概念...
热门文章
- python基础数据类型练习2
- 网络编程二-LINUX网络IO模型
- php数据接受数据,php接收数据
- 苹果手机专用计算机,苹果手机的使用
- 图集谷-写真集-爬虫-2.0
- TeamViewer 14完美中文版
- 小技巧: 掀开 Metacity 的同化殊效
- 什么是基础设施建设?
- DataTable小详解
- apriltag linux 编译,无法为python包“apriltag”、“apriltags”和“aruco”构建轮子