记于崔庆才爬虫1-2

  1. Python3跟Python2的区别:
    1:只有print()函数,没有print函数
    2:只有range()函数,没有arange()函数

  2. hasattr(object(对象),name(属性)):检查给定的对象是否有指定的属性

  3. #coding=utf-8:用于整个代码开头,表示代码全局不管是编码还是解码都用的utf-8形式
  4. re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符,即匹配任意字符
  5. self表示类的实例
    class test:
    def prt(self):
    t=test()
    t.prt()其实就是test.prt(t)
  6. u.encode(‘utf-8’)中u代表unicode(一种字符串形式,即文本),python3中u跟s 都代表字符串,bytes由str通过encode(解码)方法转化得到,str由bytes通过decode(编码)方法转化得到,bytes具有string类型的所有操作 例:(网页打开方式)pageCode = response.read().decode(‘utf-8’) (注:此时pagecode里面可以显示中文字符,中文字符也算一种字符串)(文本打开方式)import codecs,sys
    f=codecs.open(path,'r','gbk')

    例:1:def getPage(self,pageNum):
    try:
    url = self.baseURL+ self.seeLZ + '&pn=' + str(pageNum)
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    return response.read().decode('utf-8')(第一步:获取网页html代码后,进行编码)
    2: def getContent(self,page):
    #匹配所有楼层的内容
    pattern = re.compile('<div id="post_content_.*?>(.*?)</div>',re.S)
    items = re.findall(pattern,page)
    contents = []
    for item in items:
    #将文本进行去除标签处理,同时在前后加入换行符
    content = "\n"+self.tool.replace(item)+"\n"
    contents.append(content.encode('utf-8'))(第二步:进行解码,只有这样才能实现contents.append操作)
    return contents
    3:def writeData(self,contents):
    #向文件写入每一楼的信息
    for item in contents:
    if self.floorTag == '1':
    #楼之间的分隔符
    floorLine = "\n" + str(self.floor) + u"-----------------------------------------------------------------------------------------\n"
    self.file.write(floorLine)
    self.file.write(item.decode('utf-8'))(第三步:将编码后的代码写入文件中)
    self.floor += 1
  7. s.strip()去除字符串首尾空格,s.strip(‘chars’)使chars中的每个字符均不出现在s的首尾中
  8. import urllib.request as request
    import urllib.parse as parse
    import urllib.error as error
    import re
    例:req=request.Response(url)
    response=request.urlopen(req)
    return response.read().decode(‘utf-8’)
    7:所有外来输入的信号都需要初始化,如URL变成self.URL:
    (#百度贴吧爬虫类 )
    class BDTB:

(#初始化,传入基地址,是否只看楼主的参数)
def init(self,baseUrl,seeLZ,floorTag):
#base链接地址
self.baseURL = baseUrl
#是否只看楼主
self.seeLZ = ‘?see_lz=’+str(seeLZ)
#HTML标签剔除工具类对象
self.tool = Tool()
#全局file变量,文件写入操作对象
self.file = None
#楼层标号,初始为1
self.floor = 1
#默认的标题,如果没有成功获取到标题的话则会用这个标题
self.defaultTitle = u”百度贴吧”
#是否写入楼分隔符的标记
self.floorTag = floorTag
print u”请输入帖子代号”
baseURL = ‘http://tieba.baidu.com/p/’ + str(raw_input(u’http://tieba.baidu.com/p/‘))
seeLZ = raw_input(“是否只获取楼主发言,是输入1,否输入0\n”)
floorTag = raw_input(“是否写入楼层信息,是输入1,否输入0\n”)
bdtb = BDTB(baseURL,seeLZ,floorTag)
bdtb.start()

9:
1:当需要爬取重复性内容时,如内容是,用findall()函数,从item[0]开始

content = response.read().decode('utf-8')
pattern = re.compile('<div.*?author">.*?<a.*?<img.*?>(.*?)</a>.*?<div.*?'+
                         'content">(.*?)<!--(.*?)-->.*?</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
items = re.findall(pattern,content)
for item in items:
    print item[0],item[1],item[2],item[3],item[4]
2:当需要爬取单独性内容时,如标题时,用search()函数,从group(1)
#获取帖子标题
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

此时输出:纯原创我心中的NBA2014-2015赛季现役50大(标准纯文本,不带格式)
但如果是group(0)时,输出:

纯原创我心中的NBA2014-2015赛季现役50大

(即带字体格式)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值