python网页编程代码大全_Python编写网页爬虫爬取oj上的代码信息

OJ升级,代码可能会丢失. 所以要事先备份. 一開始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启示和聪神的原始代码, 网页爬虫走起!

已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本号, 试了一下改动到3.0版本号, 要做非常多包的更替,感觉比較烦,所以索性就在这个2.7版本号上完好了.

首先欣赏一下原始代码,我给加了一些凝视:

# -*- coding: cp936 -*-

import urllib2

import urllib

import re

import thread

import time

import cookielib

cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar())

opener = urllib2.build_opener(cookie_support,urllib2.HTTPHandler)

urllib2.install_opener(opener)

# 以下是正則表達式部分,意在过滤爬取页面的标签信息

class Tool:

A = re.compile(" \;") #A-J对标签进行匹配

B = re.compile("\
")

C = re.compile("

D = re.compile(">\;")

E = re.compile(""\;")

F = re.compile("&")

G = re.compile("Times\ New\ Roman\"\>")

H = re.compile("\")

I = re.compile("'")

J = re.compile(r'语言.*?face=')

def replace_char(self,x): #将标签内容替换成目标内容

x=self.A.sub(" ",x)

x=self.B.sub("\n\t",x)

x=self.C.sub("

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)

return x

class HTML_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

})

def GetPage(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时 继续抓取下一页

while flag:#下一页网址

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)

if next:

flag=True

print("True")

else:

flag=False

print("False")

#print(myPage)#找到当前页面下全部题目代码的连接,放在myItem这个list中

myItem = re.findall(r'

你可能感兴趣的:(python网页编程代码大全)