python爬虫入门-登录hdu-自动提交代码

本文从WordPress迁移而来, 查看全部WordPress迁移文章

以hdu为目标,实现模拟登录和自动提交代码

以hdu为目标是因为相对简单一些

主要呀解决的问题就是通过chrome的F12的network功能,查看浏览器是怎么向hdu提交信息的,然后我们编程模拟(伪装)浏览器,实现这些功能

遇到的一个问题是怎么模拟登录,之前一直用原生的urllib,urllib2库不成功,用了requests成功了,主要还是一些原理性的东西没有搞懂

登录后,手动去提交一次题目,观察是通过哪些url提交代码的,是post还是get,解决这些问题了,就可以了

最后成功提交了10次1000这道题目,算是开了个好头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*- coding: cp936 -*-
import requests

root_url = 'http://acm.hdu.edu.cn'
login_url = 'http://acm.hdu.edu.cn/userloginex.php?action=login'
submit_url = 'http://acm.hdu.edu.cn/submit.php?action=submit'
status_url = 'http://acm.hdu.edu.cn/status.php'

# 登录
s = requests.session()
login_data = {'username':'*****', 'userpass':'*****', 'login':'Sign In'}
s.post(login_url, login_data)

# 打开一个代码源文件
pid1000_cpp = open('1000.cpp', 'r')
code = pid1000_cpp.read()
submit_data = {'check':'0', 'problemid':'1000', 'language':'0', 'usercode':code}

def submit_code():
# 发送代码
s.post(submit_url, submit_data)

for i in range(10):
submit_code()

# 查看结果
r = s.get(status_url)
html = r.text.encode('ascii', 'ignore').decode('ascii')
fd = open('hdu-1000-submit.html', 'w')
fd.write(html)
fd.close()
pid1000_cpp.close()