这几天刷华东OJ的题,写博客还要复制HTML的代码,感觉麻烦的一批,然后就去摸鱼写了个小爬虫。。
看一下运行效果吧~
输入详细的pid、cid或id即可爬取相应的html代码
一些注意要点:
关键的还是登陆问题,程序需要在同文件夹下添加一个“headers.csv”文件用于更新和保存cookie,内容包括浏览器标头和cookie就好。也可以看我的。。。
程序提示需要输入新的cookie时去浏览器登录一下把cookie复制进去就好。(什么,你不知道cookie从哪找?那你知道羊驼为什么会淹死吗?)
源码:
import requests from requests.exceptions import RequestException import re import csv headers={} with open('headers.csv','r') as f: rawinfos=list(csv.reader(f)) for i in rawinfos: headers[i[0]]=i[1] def get_one_page(url, headers): try: response = requests.get(url, headers=headers) if response.status_code == 200: response.encoding = 'utf-8' return response.text return None except RequestException: return None flag=int(input("是否为专题题目(0/1):")) if flag: url="http://exam.upc.edu.cn/problem.php?cid="+input("专题(cid):")+"&pid="+input("题号(pid):") else: url="http://exam.upc.edu.cn/problem.php?id="+input("题号(id):") FLAG=False html=get_one_page(url,headers) while re.findall('<form id="(.*?)"', html,re.S)!=[]: headers['Cookie']=input('your cookie may lose efficacy, input again:') html=get_one_page(url,headers) FLAG=True if FLAG: with open('headers.csv','w') as f: writer=csv.writer(f) for i in headers: data=[] data.append(i) data.append(headers[i]) writer.writerow(data) aim=re.findall('<!-- Main component for a primary marketing message or call to action -->(.*?)<!-- /container -->',html,re.S) rr1=re.findall('<title>(.*?)</title>',aim[0],re.S)[0] rr2=re.findall('<!--EndMarkForVirtualJudge-->(.*?)</center>',aim[0],re.S)[0] tmp=aim[0] tmp=tmp.replace("<title>"+rr1+"</title>",'') tmp=tmp.replace(rr2,'') print(tmp)