python--代码规范

抓取网页指定信息

这里是拿一帖吧做例子,主要要求: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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值