用Python编写网页爬虫爬取oj上的代码
今天我们给大家讲解一下关于Python爬取网页的源代码,直接是干货,在代码中有不足之处,或者专业的Python高级开发程序员大神有更便捷的方式,我们可以共享。
#-*-coding:cp936-*-
importurllib2
importurllib
importre
importthread
importtime
importcookielib
cookie_support=urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener=urllib2.build_opener(cookie_support,urllib2.HTTPHandler)
urllib2.install_opener(opener)
#以下是正則表達式部分,意在过滤爬取页面的标签信息
classTool:
A=re.compile(";")#A-J对标签进行匹配
B=re.compile("
")
C=re.compile("<;")
D=re.compile(">;")
E=re.compile("";")
F=re.compile("&")
G=re.compile("TimesNewRoman">")
H=re.compile("")
I=re.compile(""")
J=re.compile(r"语言.*?face=")
defreplace_char(self,x):#将标签内容替换成目标内容
x=self.A.sub("",x)
x=self.B.sub("",x)
x=self.C.sub("<",x)
x=self.D.sub(">",x)
x=self.E.sub(""",x)
x=self.F.sub("&",x)
x=self.G.sub("",x)
x=self.H.sub("",x)
x=self.I.sub(""",x)
x=self.J.sub("",x)
returnx
classHTML_Model:
def__init__(self,u,p):
self.userName=u#username与password等登入信息
self.passWord=p
self.mytool=Tool()
self.page=1#从代码页的第一页開始爬
self.postdata=urllib.urlencode({
"userName":self.userName,
"password":self.passWord
})
defGetPage(self):
myUrl="http://acm.njupt.edu.cn/acmhome/login.do"
#请求包括网址和登入表单
req=urllib2.Request(
url=myUrl,
data=self.postdata
)
#此次对应为打开这个url
myResponse=urllib2.urlopen(req)
#读取页面
myPage=myResponse.read()
flag=True
#当flag为true时继续抓取下一页
whileflag:
#下一页网址
myUrl="http://acm.njupt.edu.cn/acmhome/showstatus.do?problemId=null&contestId=null&userName="+self.userName+"&result=1&language=&page="+str(self.page)
#print(myUrl)
myResponse=urllib2.urlopen(myUrl)
#打开下一页的页面
myPage=myResponse.read()
#正則表達式搜索是否还有下一页,更新flag.原理为在当前页查找,假设当前页面有提交的代码,则含有相似"G++"这种标签.也就是说假设我的代码仅仅有84页,那么则在第85页flag-false,不再訪问86页
st="
next=re.search(st,myPage)
#print(st)
print(next)
ifnext:
flag=True
print("True")
else:
flag=False
print("False")
#print(myPage)
#找到当前页面下全部题目代码的连接,放在myItem这个list中
myItem=re.findall(r"
foriteminmyItem:
#print(item)
#对于每一个题目代码连接,訪问其所在页面
url="http://acm.njupt.edu.cn/acmhome/solutionCode.do?id="+item[37:len(item)-2]
#print(url)
myResponse=urllib2.urlopen(url)
myPage=myResponse.read()
mytem=re.findall(r"语言.*?.*?TimesNewRoman">.*?",myPage,re.S)
#print(mytem)
sName=re.findall(r"源码--.*?;")
E=re.compile("";")
F=re.compile("&")
G=re.compile(""TimesNewRoman">")
H=re.compile("")
I=re.compile(""")
J=re.compile(r"语言.*?face=",re.DOTALL)
defreplace_char(self,x):
x=self.A.sub("",x)
x=self.B.sub("",x)
x=self.C.sub("<",x)
x=self.D.sub(">",x)
x=self.E.sub(""",x)
x=self.F.sub("&",x)
x=self.G.sub("",x)
x=self.H.sub("",x)
x=self.I.sub(""",x)
x=self.J.sub("",x)
returnx
classHTML_Model:
def__init__(self,u,p):
self.userName=u
self.passWord=p
self.mytool=Tool()
self.page=81
self.postdata=urllib.urlencode({
"userName":self.userName,
"password":self.passWord
})
defGetPage(self):
myUrl="http://acm.njupt.edu.cn/acmhome/login.do"
req=urllib2.Request(
url=myUrl,
data=self.postdata
)
myResponse=urllib2.urlopen(req)
myPage=myResponse.read()
flag=True
whileflag:
myUrl="http://acm.njupt.edu.cn/acmhome/showstatus.do?problemId=null&contestId=null&userName="+self.userName+"&result=1&language=&page="+str(self.page)
#print(myUrl)
myResponse=urllib2.urlopen(myUrl)
myPage=myResponse.read()
st="
next=re.search(st,myPage)
#print(st)
print(next)
ifnext:
flag=True
print("True")
else:
flag=False
print("False")
#print(myPage)
myItem=re.findall(r"
foriteminmyItem:
#print(item)
url="http://acm.njupt.edu.cn/acmhome/solutionCode.do?id="+item[37:len(item)-2]
#print(url)
myResponse=urllib2.urlopen(url)
myPage=myResponse.read()
mytem=re.findall(r"语言.*?.*?TimesNewRoman">.*?",myPage,re.S)
#print(mytem)
sName=re.findall(r"源码--.*?
电池巨头入局,换电会是个好生意吗?(本文首发于刘润公号,订阅刘润公号,和我一起洞察商业本质)1前段时间,电池巨头宁德时代,推出换电品牌EVOGO,发布巧克力电池自动换电站等系列产品。这件事受到很多人关注。其实不只宁
宁王员工被撬打维权官司多公司入场瓜分新能源电池蛋糕本报记者矫月李婷2月14日,有报道称,宁德时代以不正当竞争为由起诉蜂巢能源。对此消息,宁德时代方面人士于14日当天回复证券日报记者表示该案正在法律程序中,公司不做回应。此外,蜂巢能
知乎否认安装和使用过行为感知系统来源北京青年报可监测员工离职倾向深信服开发的网络监测系统引发争议知乎否认安装和使用过行为感知系统近日,有知乎员工称,知乎视频部门正在进行一轮大规模裁员而通过公司的一个内部系统,可以
亚马逊仓库把我的货物弄丢了不承认,把我账户关闭后又找出来了亚马逊踏坑系列之物流篇1由于卖家把货物发运到亚马逊FBA仓库后,所有的订单配送售后退换货都由亚马逊全部负责处理,所以绝大多数卖家不会关心自己的货物是否被亚马逊弄丢了。以我的经历看,
不务正业,著名相机品牌推出高端手表系列我们国内大部分表友认识徕卡(Leica)可能都是因为华为的旗舰手机相机。徕卡向来是相机品牌中最钟爱限量款和周边产品的品牌。这不,在2018年发布的全新自产手表终于在近日上市了。19
小米招聘啦岗位职责1总体负责AI视觉能力在小爱的落地2参与人工智能Android软件的需求工作,撰写相关技术文档3负责人工智能Android软件的设计和开发工作4负责人工智能Android手
指纹解锁最优解最近发布的手机都是侧面电源键指纹解锁了。不明白有那么多人无知的人吐槽为什么不是屏幕指纹解锁?那么我们来分解一下指纹解锁的步骤,场景手机放台面。1,背后指纹拿手机起来,触摸解锁。2,
东南亚手机市场洗牌小米无缘前三,OPPO痛失第一,三星重夺王位文球子审核子扬校正知秋目前,国产手机厂商已经将发展重心由国内逐渐向海外转移,同时,由于国产手机厂商的搅局,不少国家的智能手机市场格局彻底被打乱。2月11日集微网消息,知名市调机构C
iphone13pro绿屏各机友如何?iphone12系列,很多人都绿屏包括我自己订购两台都是绿屏让我退了苦等了一年首发订购13pro128g7999。拿到机器第一就是正常用看是否绿屏还好一切都正常随着系统的更新更到1
科研笔记神器一边视频,一边笔记,轻松搞定B站视频学习上一期,笔者介绍了一款笔记神器Obsidian,它可以用于思维导图和知识管理。高效阅读和写作,席卷科研圈的科研神器由于计算机互联网技术的发展,线上学习视频学习已经成为了一种流行的学
8K超高清视频时代,如何拍摄创作质感大片?去年12月,B站正式上线8K视频功能,进入8K超高清视频时代,画质极限再突破!而高端相机厂商早已开始推出视频向机型,主打8K视频录制功能。手机拍照也不遑多让,今年1月上市的不少旗舰