python http requests 怎么实现模拟登录,提交表单

Python015

python http requests 怎么实现模拟登录,提交表单,第1张

import requests

url = 'https://***'

postdata = {

'username' : '***',

'password' : '***',

}

s = requests.session()

response = s.post(urls, data = postdata)

PS:星号换成你你实际的url和用户名密码

我比较喜欢用requests模块,这是第三方模块,需要自行安装。

安装方法如下:

C:\Users\Administrator>pip install requests

这个的关键是首先分析出post参数的值,我使用firefox的firebug插件的。

在分析完成具体的post参数后及其值后,就可以考虑传值了。

示例代码

import requests

xfid = '12345678'

str1 = "/wEPDwUKMjEwMTA4MjU3NQ9kFgICAw9kFgICAQ9kFghmD2QWBAIBD2QWAgIBDw8WAh4EVGV4dAUMMTAxNjAwNDU0MjU4ZGQCAw9kFgICAQ8PFgIfAAUJ5pyx5a2U6IqzZGQCAQ9kFgICAQ9kFgICAQ8PFgIfAAV75Y+N5pig5p2R5Lmm6K6w5aSa5bm05p2l6Jma5oql5om/5YyF5Zyf5Zyw5pWw6YeP77yM5L615Y2g5Zyf5Zyw55u06KGl5qy+6Zeu6"

str2 = "/wAV4V4n0wgFZHr3diEzRKmoaXqxD1ZDMcXvMuQ4prcovBwlSwNy5xBFngPatMLuX4Obd5FfbMdfSobes="

url = 'http://*************/SZ_Result.aspx?infoid=' + xfid

data = {

        '__EVENTTARGET': '',

        '__EVENTARGUMENT': '',

        '__LASTFOCUS': '',

        '__VIEWSTATE': str1,

        '__VIEWSTATEGENERATOR': '6FD494A2',

        '__EVENTVALIDATION': str2,

        'DropDownList1': '满意',

        'DropDownList2': '满意',

        'Button1': '提交',

        'HiddenField1': xfid,

        }

html = requests.get(url)

html_post = requests.post(url, data=data)

print 'DONE!!!!'

这样就完成post传值了。

上面的代码是示例代码,是不能够直接执行的。

下面这个程序是抓取网页的一个例子,MyOpener类是为了模拟浏览器客户端,并采用随机选取的方式以防网站将你认为是机器人。

MyFunc函数抓取你指定的url,并提取了其中的href链接,图片的获取类似,一般是<img src=xxx>这样的形式,其他的功能应该也不难,去网上搜下应该有些例子。

import re

from urllib import FancyURLopener

from random import choice

user_agents = [

'Mozilla/5.0 (WindowsUWindows NT 5.1itrv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11',

'Opera/9.25 (Windows NT 5.1Uen)',

'Mozilla/4.0 (compatibleMSIE 6.0Windows NT 5.1SV1.NET CLR 1.1.4322.NET CLR 2.0.50727)',

'Mozilla/5.0 (compatibleKonqueror/3.5Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)',

'Mozilla/5.0 (X11ULinux i686en-USrv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12',

'Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9'

]

class MyOpener(FancyURLopener, object):

version = choice(user_agents)

def MyFunc(url):

myopener = MyOpener()

s = myopener.open(url).read()

ss=s.replace("\n"," ")

urls=re.findall(r"<a.*?href=.*?<\/a>",ss,re.I)#寻找href链接

for i in urls:

do sth.