您的位置:首页 > 编程语言 > Python开发

Python 模拟登录及表单提交

2012-03-03 17:22 435 查看
01
#
-*- coding:utf-8 -*-
02
import
re
03
import
urllib
04
import
urllib2
05
import
cookielib
06
 
07
#获取CSDN博客标题和正文
08
url
=
"http://blog.csdn.net/[username]/archive/2010/07/05/5712850.aspx"
09
sock
=
urllib.urlopen(url)
10
html
=
sock.read()
11
sock.close()
12
content
=
re.findall(
'(?<=blogstory">).*(?=<p
class="right artical)'
,
html,re.S)
13
content
=
re.findall(
'<script.*>.*</script>(.*)'
,
content[
0
],
re.S)
14
title
=
re.findall(
'(?<=<title>)(.*)-.*
- CSDN.*(?=</title>)'
,
html,re.S)
15
#根据上文获取内容新建表单值
16
blog
=
{
'spBlogTitle'
:
title[
0
].decode(
'utf-8'
).encode(
'gbk'
),
#百度博客标题
17
'spBlogText'
:
content[
0
].decode(
'utf-8'
).encode(
'gbk'
),
#百度博客内容
18
'ct'
:
"1"
,
19
'cm'
:
"1"
}
20
del
content
21
del
title
22
 
23
#模拟登录
24
cj
=
cookielib.CookieJar()
25
#用户名和密码
26
post_data
=
urllib.urlencode({
'username'
:
'[username]'
,
'password'
:
'[password]'
,
'pwd'
:
'1'
})
27
#登录路径
28
path
=
'https://passport.baidu.com/?login'
29
opener
=
urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
30
opener.addheaders
=
[(
'User-agent'
,
'Opera/9.23'
)]
31
urllib2.install_opener(opener)
32
req
=
urllib2.Request(path,
post_data)
33
conn
=
urllib2.urlopen(req)
34
 
35
#获取百度发布博客的认证令牌
36
bd
=
urllib2.urlopen(urllib2.Request(
'http://hi.baidu.com/[username]/creat/blog'
)).read()
37
bd
=
re.findall(
'(?<=bdstoken\"
value=\").*(?=ct)'
,
bd,re.S)
38
blog[
'bdstoken'
]
=
bd[
0
][:
32
]
39
#设置分类名
40
blog[
'spBlogCatName'
]
=
'php'
41
#比较表单发布博客
42
req2
=
urllib2.Request(
'http://hi.baidu.com/[username]/commit'
,
urllib.urlencode(blog))
43
 
44
#查看表单提交后返回内容
45
print
urllib2.urlopen(req2).read()
46
 
47
#请将[username]/[password]替换为您的真实用户名和密码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: