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

Python3 BeautifulSoup爬虫 HDU自动提交

2017-06-19 13:59 323 查看
import http.cookiejar
import logging
import time
import urllib.parse
import urllib.request

from bs4 import BeautifulSoup

from submitcode import SubmitCode

class SubmitHDdu():
def __init__(self, userId, passWord):
self.userId = userId
self.passWord = passWord
cj = http.cookiejar.LWPCookieJar()
self.opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
urllib.request.install_opener(self.opener)
self.languageMap = {}
self.languageMap["Cpp"] = 0
self.languageMap["Java"] = 5

def login(self):
params = {
"username": self.userId,
"userpass": self.passWord,
"login": "Sign+In"
}
loginUrl = "http://acm.hdu.edu.cn/userloginex.php?action=login"
postData = urllib.parse.urlencode(params).encode(encoding='UTF8')
html = self.opener.open(loginUrl, postData).read()
soup = BeautifulSoup(html, "xml")
return soup.prettify().find("Sign Out") > -1

def submit(self, pid, language, src):
params = {
"problemid": pid,
"language": self.languageMap.get(language),
"usercode": src,
"check": 0
}
submitUrl = "http://acm.hdu.edu.cn/submit.php?action=submit"
postData = urllib.parse.urlencode(params).encode(encoding='UTF8')
self.opener.open(submitUrl, postData)

def status(self):
statusUrl = "http://acm.hdu.edu.cn/status.php?first=&pid=&user=" + self.userId + "&lang=0&status=0"
html = urllib.request.urlopen(statusUrl).read()
soup = BeautifulSoup(html, "xml")
fonts = soup.find_all("font")[2:]
trs = soup.find_all("tr")[10:]
n = len(trs)
for i in range(0, n):
contents = trs[i].contents
print(contents[1].string.split(">")[1], end="\t")
print(contents[2].string, end="\t")
print(fonts[i].string.split(">")[1], end="\t")
print(contents[4].contents[0].string, end="\t")
print(contents[5].string, end="\t")
print(contents[6].string, end="\t")
print(contents[7].string, end="\t")
print(contents[8].string)

if __name__ == '__main__':
FORMAT = "[ZojAutoSubmit]-----%(message)s------"
logging.basicConfig(level=logging.INFO, format=FORMAT)
# 用户名 , 密码 (明文)
hdu = SubmitHDdu("laoli2009", "123456")
if hdu.login():
logging.info("login success!")
# hdu.submit("1000", "Cpp", SubmitCode.cppCode)
hdu.submit("1000", "Java" , SubmitCode.javaCode)
logging.info("submit success!")
time.sleep(60)
hdu.status()
logging.info("search status success!")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: