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!")
Python3 BeautifulSoup爬虫 HDU自动提交
最新推荐文章于 2022-05-21 11:40:36 发布