python提交表单_python 实现post 表单提交
前一阵十九大召开,公司有任务要通过公司的平台页面添加一批数据(可平台开发人员已离职,种种原因也无法后台数据库批量添加,只能通过页面单个添加),这就造成只能人工一个一个的进行添加。但是项目组人手严重不足,给任务按时的完成带来了丛丛困难。由于接触到了Python 对Python的爬虫技术感上了兴趣,其中理解到Python的requests的post提交登录表单的功能。决定使用Python进行数据添加。经过不懈的努力,终于使用cookies登录方式,成功的提交了multipart/form-data表单数据,终于完成了添加任务。
废话不说了!先上代码
coding:utf-8
import requests
url = 'http://xxxx/xxxx/XNweA.exol' #输入要提交表单的页面url
‘’‘
我相信一般公司内部平台的页面都是需要登录才能进行各种操作的。
为了保持登录状态提交表单,我们就需要cookies
’‘’
cookie = {
'xxx':'xxx',
'userid':'xxx',
'customerType':'xxx',
'curMenuId':'xxx',
'curMenuCode':'xxx',
'ASP.NET_SessionId':'xxx'
} # 带着Cookie向网页发请求\
内部网一般限制不严,我们只要告诉服务器是浏览器访问的即可
headers = {
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36'
}
查看post要提交的数据项,没有的我们就填空
files = {
'__EVENTTARGET': (None, ''),
'__EVENTARGUMENT': (None, ''),
'__VIEWSTATE':
'ctl00MainContenttbxQueryNo': (None, ''),
'ctl00MainContentrblQueryType': (None, '1'),
'ctl00MainContenttbxFlowId': (None, ''),
'ctl00MainContenttbxQueryReason': (None, '111111111111111'),
'ctl00MainContentBtnQuery': (None, '查询客户信息')
}
#使用requests 的post方法提交数据
response = requests.post(url, files=files, headers=headers, cookies=cookie, allow_redirects=True)
print(response.url)
html = response.text
print (html)
问题1, 平台需要登录才能提交数据。为了防止交数据时出现登录提示,使用爬虫中cookies 方式跳过输入登录名和密码,进行页面正常的访问。
问题2, 为了抓取提交表单数据的选项我使用了chrome浏览器的network功能去抓取提交数据项,由于表单页提交后会重定向新的页面,数据一直抓取不到。(经过好多次的调试,仍然无果)后来换了Firefox 终于抓取成功。(百度了下,Chrome确实对重定向的数据无法抓取到,不知道是不是一个bug,所以建议多用几个浏览器对你需要的数据进行抓取测试)
由于工作内容页面比较敏感,所以没有提供截图。大家如果不知道如何获取cookies 和如何找到post的数据项。可以看看下面的连接。这些大神讲的都很详细的
