Python3 BeautifulSoup爬虫 POJ自动提交

来源:互联网 发布:美国最高法院知乎 编辑:程序博客网 时间:2024/06/08 05:57

POJ 提交代码采用Base64加密方式

import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():    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)    def decode(self , code):        bytesString = code.encode(encoding="utf-8")        encodestr = base64.b64encode(bytesString)        return  encodestr    def login(self):        params = {            "user_id1": self.userId,            "password1": self.passWord,            "B1": "login",            "url": "/"        }        loginUrl = "http://poj.org/login"        postData = urllib.parse.urlencode(params).encode(encoding='UTF8')        html = self.opener.open(loginUrl, postData).read()        soup = BeautifulSoup(html, "xml")        return soup.prettify().find("login?action=logout") > -1    def submit(self, pid, language, src):        params = {            "problem_id": pid,            "language": language,            "source": src,            "submit": "Submit",            "encoded": 1        }        submitUrl = "http://poj.org/submit"        postData = urllib.parse.urlencode(params).encode(encoding='UTF8')        self.opener.open(submitUrl, postData)    def status(self):        statusUrl = "http://poj.org/status?problem_id=&user_id=" + self.userId + "&result=&language="        html = urllib.request.urlopen(statusUrl).read()        soup = BeautifulSoup(html, "xml")        trs = soup.find_all("tr")        for row in trs[5:]:            contest = row.contents            print(contest[1].string, end="\t")            print(contest[3].contents[0].string.split(">")[1], end="\t")            try:                print(contest[4].contents[0].contents[1].string.split(">")[1], end="\t")            except:                print(contest[4].contents[0].string.split(">")[1], end="\t")            print(contest[7].contents[0].string, end="\t")            print(contest[8].contents[0].string, end="\t")            print(contest[9].contents[0].string, end="\t\n")if __name__ == '__main__':    FORMAT = "[PojAutoSubmit]-----%(message)s------"    logging.basicConfig(level=logging.INFO, format=FORMAT)    #用户名 , 密码 (明文)    poj = SubmitPoj("用户名", "密码")    if poj.login():        logging.info("login success!")        poj.submit("1700", 2 , poj.decode(SubmitCode.javaCode))        poj.submit("1000", 0 , poj.decode(SubmitCode.cppCode))        logging.info("submit success!")        poj.status()        logging.info("search status success!")


class SubmitCode():    javaCode = '''import java.io.BufferedReader;  import java.io.InputStream;  import java.io.InputStreamReader;  import java.io.PrintWriter;  import java.math.BigInteger;  import java.util.Arrays;  import java.util.StringTokenizer;    public class Main {      public static void main(String[] args) {          new Task().solve() ;      }  }    class Task{      InputReader in = new InputReader(System.in) ;      PrintWriter out = new PrintWriter(System.out) ;        long sum(int left , int right , int[] num){          if(left == right || right == left + 1) return num[right] ;          else if(right == left + 2) return num[left] + num[left+1] + num[left+2] ;          else{              long way1 = (num[right] + num[left] + num[right-1] + num[left]) ; //(最慢最快)->最快回->(次慢最快)->最快回              long way2 = (num[left+1] + num[left+1] + num[right] + num[left]) ; //(次快最快)->次快回->(最慢次慢)->最快回              return Math.min(way1, way2) + sum(left , right-2 , num) ;          }      }            void solve(){          int t = in.nextInt() ;          while(t-- > 0){              int n = in.nextInt() ;               int[] num = new int[n] ;              for(int i = 0 ; i < n ; i++) num[i] = in.nextInt() ;               Arrays.sort(num) ;              out.println(sum(0, n-1 , num)) ;          }          out.flush() ;      }    }    class InputReader {          public BufferedReader reader;          public StringTokenizer tokenizer;                public InputReader(InputStream stream) {              reader = new BufferedReader(new InputStreamReader(stream), 32768);              tokenizer = new StringTokenizer("");          }                private void eat(String s) {              tokenizer = new StringTokenizer(s);          }                public String nextLine() {              try {                  return reader.readLine();              } catch (Exception e) {                  return null;              }          }                public boolean hasNext() {              while (!tokenizer.hasMoreTokens()) {                  String s = nextLine();                  if (s == null)                      return false;                  eat(s);              }              return true;          }                public String next() {              hasNext();              return tokenizer.nextToken();          }                public int nextInt() {              return Integer.parseInt(next());          }                public long nextLong() {              return Long.parseLong(next());          }                public double nextDouble() {              return Double.parseDouble(next());          }                public BigInteger nextBigInteger() {              return new BigInteger(next());          }            }          '''    cppCode='''#include <iostream>using namespace std;int main(){    int a,b;    cin >> a >> b;    cout << a+b << endl;    return 0;}    '''if __name__ == '__main__':    print(SubmitCode.javaCode)


170906131700AcceptedJava2823B2017-06-19 08:40:34170906121000AcceptedG++134B2017-06-19 08:36:37170860821000Compile ErrorG++47B2017-06-16 17:15:03170860811000AcceptedG++128B2017-06-16 17:14:51170860721000Compile ErrorJava128B2017-06-16 17:10:43170860621000Compile ErrorG++47B2017-06-16 17:07:19170859291030Compile ErrorGCC34B2017-06-16 15:51:16170859261010Compile ErrorGCC34B2017-06-16 15:49:54170859051000Compile ErrorGCC34B2017-06-16 15:45:17170858881001Compile ErrorGCC34B2017-06-16 15:41:43170858821000Compile ErrorJava640B2017-06-16 15:39:36170858781000AcceptedJava479B2017-06-16 15:38:29170857811000Compile ErrorJava420B2017-06-16 14:52:23170857801000Compile ErrorJava560B2017-06-16 14:52:17170857731000AcceptedJava313B2017-06-16 14:48:29170857661000AcceptedJava313B2017-06-16 14:46:57168394633237AcceptedJava5998B2017-04-06 14:11:27168385032763AcceptedJava5510B2017-04-06 09:12:45168354702763AcceptedJava5376B2017-04-05 17:13:41168344573321AcceptedJava2645B2017-04-05 14:02:26