PythonTip >> 博文 >> python

Python3模拟登录获取页面内容

zihua 2013-09-28 23:09:32 点击: 1202 | 收藏


# zhouxianglh 2013.05.03 python3.3
# Python 模拟登录,然后记录cookie,之后获取公司OA主页公文信息
import urllib.request
import http.cookiejar
from html.parser import HTMLParser
import re
import os
import shutil
# 公文HTML下载目录
filePath = "D:\\temp"

# 初始化文件目录
if  os.path.isdir(filePath):
    shutil.rmtree(filePath)
elif os.path.isfile(filePath):
    os.remove(filePath)
os.makedirs(filePath)

# 登录并获取最新的公文列表
params = {"username":"??????", "password":"???????"}
webCookie = http.cookiejar.CookieJar()
openner = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(webCookie))
webRequest = openner.open("http://192.168.8.109/default.asp", urllib.parse.urlencode(params).encode())
webRequest = openner.open("http://192.168.8.109/noticelook.asp")
htmlData = webRequest.read().decode('gbk')  # 网页是用gbk编码,所以这里用gbk编码

# map,用于记录首页的公文URL
OApages = {}
# 解析HTML,HTMLParser为系统默认的解析方式,HTML文件具有容错性,所以最好不使用xml解析
# 解析公文首页的公文列表
class MyHtmlParser(HTMLParser):
    _a_Flag = False
    _a_title = ""
    def handle_starttag(self, tag, attrs):
        if tag == "a":  # 解析公文相关的URL
            for pageUrl in attrs:
                if pageUrl[0] == 'href':
                    self._a_Flag = True
                    self._a_URL = pageUrl[1]
                    self._a_URL = self._a_URL.replace("javascript:openwin('", "http://192.168.8.109/")
                    self._a_URL = self._a_URL.replace("');", "")
    def handle_data(self, data):
        if self._a_Flag :
            self._a_title = self. _a_title + data
    def handle_endtag(self, tag):
        if tag == "a":
            self._a_title = re.sub("\W", "", self._a_title)
            OApages[self._a_URL] = self._a_title
            self._a_title = ""
            self._a_Flag = False
            
MyHtmlParser().feed(htmlData)

# 转码URL中的中文字符串
def encoderForUrl(strURL):
    # 0 将非特殊字符串替换掉
    _tempStr = re.sub("[a-z\d&/:.?=]+", ";", strURL)
    # 1 获取中文字符串
    _tempStrArr = _tempStr.split(";")
    # 2用中文转码后的字符串替换中文字符串
    for _tempStrValue in _tempStrArr:
        strURL = strURL.replace(_tempStrValue, urllib.parse.quote(_tempStrValue))
    return strURL

# 下载公文内容
print("公文首面共", len(OApages), "条公文")
for url, title in OApages.items():
    url = encoderForUrl(url)  # 这里的URL里面的参数抱括中文,例如name=小胖子,直接使用会出错,所以要将其转码
    webRequest = openner.open(url)
    htmlData = webRequest.read().decode('gbk')
    dataFile = open(filePath + os.sep + title + ".html", "w")
    dataFile.write(htmlData)
    print("写入公文:", title, "成功")

 

以上是使用Python获取公司OA的公文HTML的代码

 

原文链接:http://zhouxianglh.iteye.com/blog/1864493

作者:zihua | 分类: python | 标签: python | 阅读: 1202 | 发布于: 2013-09-28 23时 |
上一篇:GAE for java
下一篇: Django model字段类型