您的位置:首页 > 其它

创新实训6.8 改了很多bug(各个方面都有

2017-06-08 19:51 190 查看
1.修正提交代码时文件保存报错的问题

views.py problem_submit

@login_required
def problem_submit(req, proid):
global project_path
if req.method == 'GET':
return ren2res("problem/problem_submit.html", req, {'problem': Problem.objects.get(proid=proid)})
elif req.method == 'POST':
status = Status(user=req.user, pro=Problem.objects.get(proid=proid), lang=req.POST.get('lang'), result='Waiting', \
cid=-1,time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
temp = Status.objects.aggregate(maxRunid=Max('runid'))
status.source_code = str(temp['maxRunid']+1)
if req.POST.get('code'):
f = open(project_path+'/codes/' + str(status.source_code), 'w')
f.write(req.POST.get('code'))
f.close()
#status.code = base64.b64encode(bytes(req.POST.get('code'), 'utf-8'))
else:
return ren2res("problem/problem_submit.html", req,
{'problem': Problem.objects.get(proid=proid), 'err': "No Submit!"})

status.save()
#sub.source_code.save(name=str(sub.id), content=content_file)
#sub.save()
#judger.Judger(sub);

return HttpResponseRedirect("/status/")

2.修正获取题目后不能找到图片路径的问题
pipeline.py里加入工程路径

from crawl.items import ProblemItem,StatusItem
from vj.models import *
import traceback,sys,re,urllib,os
project_path = os.path.abspath('../..')
project_path = os.path.abspath('.')
sys.path.append(project_path)

3.修正了FZU题目显示标签的问题
FzuProblemSpider

class FzuProblemSpider(Spider):
name = 'fzu_problem'
#allowed_domains = ['acm.hdu.edu.cn']
problem_id = '1000'

def __init__(self, problem_id='1000', *args, **kwargs):
self.problem_id = problem_id
super(FzuProblemSpider, self).__init__(*args, **kwargs)
self.start_urls = [
'http://acm.fzu.edu.cn/problem.php?pid=%s' % problem_id
]

def parse(self, response):
html = (response.body).decode('gbk','ignore')
sel = Selector(text=html)

item = ProblemItem()
item['originOj'] = 'FZU'
item['problemId'] = self.problem_id
item['problemUrl'] = response.url
item['title'] = sel.xpath(
'//div[contains(@class,\
"problem_title")]/b/text()').extract()[0][14:].rstrip()
item['desc'] = \
sel.css('.pro_desc').extract()[0].\
replace('<div class="data">', '<pre>').\
replace('</div>', '</pre>')
try:
item['input'] = sel.css('.pro_desc').extract()[1]
except:
item['input'] = ''
try:
item['output'] = sel.css('.pro_desc').extract()[2]
except:
item['output'] = ''
item['timeLimit'] = \
sel.css('.problem_desc').re('T[\S*\s]*c')[0][12:]
item['memoryLimit'] = \
sel.css('.problem_desc').\
re('M[\S*\s]*B')[0][15:]
item['sampleInput'] = \
sel.xpath('//div[@class="data"]/text()').extract()[-2]
item['sampleOutput'] = \
sel.xpath('//div[@class="data"]/text()').extract()[-1]
item['updateTime'] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")

item['note'] = ''

return item

4.解决了中文乱码的问题
在爬取网页的时候将获取的bytes类型的数据decode

html = (response.body).decode('gbk','ignore')
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: