您的位置:首页 > 编程语言 > Python开发

python--代码规范

2015-04-15 16:48 381 查看
抓取网页指定信息

这里是拿一帖吧做例子,主要要求:1.只抓取楼主发的帖子(这里通过分析URL看出只显示楼主帖子的网页地址后面会加“see_lz=1&pn=1”这个参数)2.显示帖子页数,内容

定义了几个方法:

getPage(self,pageNum) 通过传入pageNum的值得到想访问url的页面

getTitle(self) 获取楼主帖子标题

getPageNum(self) 抓取页面的总页数,和回复数

getContent(self) 显示所有评论

定义方法 然后调用,看起来比较清晰,每个抓取的内容都用不同的方法定义起来。方法之间有关联

import urllib
import urllib2
import re

class BDTB:

#初始化,传入基地址,是否只看楼主的参数
def __init__(self,baseUrl,seeLZ):
self.baseURL = baseUrl
self.seeLZ = '?see_lz='+str(seeLZ)

#传入页码,获取该页帖子的代码
def getPage(self,pageNum):
try:
url = self.baseURL + self.seeLZ+ '&pn=' + str(pageNum)
#request = urllib2.Request(url)
#response = urllib2.urlopen(request)
#print response.read()
response = urllib2.urlopen(url).read()
#print response   #测试输出的网页
return response
except urllib2.URLError, e:
if hasattr(e,"reason"):
print u"连接百度贴吧失败,错误原因",e.reason
return None
def getTitle(self):
page = self.getPage(1)
pattern = re.compile('<h1 class="core_title_txt.*?>(.*?)</h1>',re.S)
result = re.search(pattern,page)
if result:
print result.group(1)  #测试输出
return result.group(1).strip()
else:
return None
def getPageNum(self):
page=self.getPage(1)
pattern=re.search("<span[^>]+>(\d+)</span>回复贴,共<span[^>]+>(\d+)</span>页",page)
#pattern=re.search("<span[^>]+>(\d+)</span>回复贴,共<span[^>]+>(\d+)</span>页",page)
if (pattern!=None):
print pattern.group(1)+'条回复'
print pattern.group(2)+'页'
#pattern=re.compile('<li class="l_reply_num.*?><span[^>]+>(\d+)</span>')  #只能抓取到第一个<span></span>对
#print re.findall("<span.*?>(.*?)</span>",page )
#result=re.findall(pattern,page)
#if pattern:

# print result.group()  #测试输出
#return result.group(1).strip()
#else:
#return None
def getContent(self):
page=self.getPage(1)
pattern=re.compile ("<div id=\"post_content.*?>(.*?)</div>")
result=re.findall(pattern,page)
for i in result:
print i
baseURL = 'http://tieba.baidu.com/p/3138733512'
bdtb = BDTB(baseURL,1)
bdtb.getPage(1)
bdtb.getTitle()
bdtb.getPageNum()
bdtb.getContent()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: