2016.11.02更新:
1.目前功能可以爬取到文字,并且支持中文
2.还没有处理关于HDU图片的问题
3.还没有处理其他OJ的类,也在思考如何选取不同的OJ,调用不同的类。
4.目前还没有查出是自身网速还是HDU自身问题,经常会' 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败' ,考虑如何加异常
2016.11.03 更新:
1.更新了查找带图片的题,使用了异常处理
2.考虑到数学公式题的处理(异常处理思路:和图片一样,把mathjax提取出来留下来,以后交给html处理)
3.还是没有能处理好页面的br标签和nbsp标签,(思路:使用find查找,然后循环输出。这个思路不够明确)
2016.11.04更新:
1.发现了思想误区:html网页是可以识别标签的!!!所以根本不用处理标签,只要把属于题面的那一行处理出来就好了;
# -*- coding=utf-8 -*-
import requests
import re
import time
from bs4 import BeautifulSoup
class spider(object):
def get_PD(self,proID):
url = 'http://acm.hdu.edu.cn/showproblem.php?pid='
html = requests.get(url + str(proID)).content
soup= BeautifulSoup(html, 'lxml')
print("======题目名称:======")
hduoj = soup.find_all('h1')
for i in hduoj:
title = i.contents[0].string
break
print(title)
soup = soup.find('table', attrs={'width': '980', 'border': '0', 'align': 'center', 'cellspacing': '0'})
soup = soup.find_all('div',attrs={'class':'panel_content'})
n = 0
s = list()
for i in soup:
if n == 0 :
n+=1
print("======Problem Description======")
try: #对图像题的异常处理
title = i.img['src']
for j in title:
if n < 2:
n += 1
continue
s.append(j)
strlen = ''.join(s)
url2 = 'http://acm.hdu.edu.cn/' + strlen
print(i)
print(url2)
continue
except:
print(i)
continue
if n==1:
n+=1
print("======Input======")
print(i)
continue
if n==2:
n+=1
print("======Output======")
print(i)
continue
if n==3:
n+=1
print("======Sample Input======")
print(i)
continue
if n==4:
n+=1
print("======Sample Output======")
print(i)
continue
if n==5:
n+=1
print("======Author======")
print(i)
continue
if n>5:
break
if __name__ == '__main__':
c = spider()
problemID = input("请输入你想查询的题号:")
c.get_PD(problemID)
’