用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"源码--.*?
个人喜欢小屏手机,有什么颜值高性能给力的吗,二手没关系?一说到小屏手机,很多人都会又爱又恨。恨的是现在的手机越做越大,爱的是小屏手机那种精致感是大屏手机所给不了的。国产手机中基本是没有什么太好的小屏手机,很多带有se的版本都是旗舰手机的
内蒙古特产生态互联网特产,打造地方特色特产特产是指来源于特定区域品质优异的农林产品或加工产品,可以是直接采收的原料,也可以经特殊工艺加工的制品,但是,必须具备两个特点,一是地域性特点,这是形成特产的一个先决条件,其次是品质
特色旗舰价格触底,内行捡漏已开始买新不买旧是在手机行业内一直流传着的一句话。毕竟新产品无论是从产品设计还是硬件堆砌系统优化都是当下最新最好的。但说白一点,这真的是相当片面了,因为并不是所有的人都追求极致的性能完美
推荐几款目前能打的专业游戏手机,有你喜欢的一款吗?推荐几款目前能打的专业游戏手机,有你喜欢的一款吗?第一款红魔6红魔6似乎使用了风冷散热系统,这有助于其发挥骁龙888的全部威力。此前在红魔3上,红魔就率先采用了主动式散热的风冷技术
币圈惊现6亿美元盗窃案因为好玩!黑客退款是对金钱不感兴趣盗币周二,PolyNetwork宣布遭黑客入侵,30多分钟内价值超6。1亿美元的资产被洗劫一空,包括3。02亿枚USDT5。5万枚ETH2000枚比特币等若干类代币。6。1亿美元的
助听器必须医院验配吗?为什么?医院本身没有验配助听器的,都是助听器代理跟医院有合作的,医生检查完,如果需要配助听器就会把你介绍给合作的代理,验配完了去他们的办公室一般都在写字楼里面去取机,建议你去专业的连锁的听
微信这5个地方不设置,陌生人就能随意看到你的隐私,快告诉家人本文编辑今日头条作者维权骑士签约用户小俊技术分享独家原创制作未经授权严禁转载,发现抄袭者将进行全网维权投诉分享生活小妙招,享受科技新生活!大家好,欢迎来到今天的知识分享!我是你们的
数博会专业论坛聚焦元宇宙笔者从2022中国大数据产业博览会执委会获悉,元宇宙专业论坛将于5月26日下午在数博会官网(httpswww。bigdataexpo。cn)举行,嘉宾将围绕突破虚实超越想象共享元宇
科学各学科的疆界科学的宏伟目标是弄清楚事物是如何运作的,这包括一些巨大的问题,比如宇宙从哪里来?宇宙是如何形成的?所有这些是如何运行和相互作用的?人类的智慧能够用我们的思想去体验和探索宇宙吗?自从
物联网工程专业该怎么学?麦叔吐血整理!物联网知识点(总结)文章目录一物联网的定义二物联网架构及组成三RFID系统组成及示意图四云计算云存储五传感器网络六大数据的定义及特征七传感器的基本原理八物理量数据采集过程九模拟信号转换为数字信号的三个
杜甫学过物理吗?科学家从古诗词中给你不一样的答案内涵丰富的中国古诗词,总有回味无穷的意境和韵味。科学玩跨界,在诗词之美中发现科学之光。北京交通大学陈征老师以科学视角重新解读诗词,锁定本系列趣味科普课,一起发现诗词中的科学世界北京