案例:使用正则表达式的爬虫(爬取段子网的关键信息)

案例:使用正则表达式的爬虫

现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了。

现在我们进入段子网:http://duanziwang.com/

根据网页的信息,我们可以爬取段子网的段子内容,代码如下:

#-*- coding:utf-8 -*-
import urllib2
import re
class Spider:
    """
            段子网
        """

    def loadPage(self, page):
        """
            @brief 定义一个url请求网页的方法
            @param page 需要请求的第几页
            @returns 返回的页面html
        """

        url = "http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/" + str(page) + "/"
        # User-Agent头
        user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
        #<h1 class="post-title"><a href="http://duanziwang.com/1362.html">情侣</a></h1>
        headers = {'User-Agent': user_agent}
        req = urllib2.Request(url, headers=headers)
        response = urllib2.urlopen(req)
        html = response.read()
        pattern = re.compile(r'(<p>|</p>)')
        html = pattern.sub("", html)
        pattern = re.compile(r'<br>')
        html = pattern.sub("\\n", html)

        pattern = re.compile(r'<div class="post-content">(.*?)</div>', re.S)
        item_list = pattern.findall(html)

        return item_list

    def printOnePage(self, item_list, page):
        """
            @brief 处理得到的段子列表
            @param item_list 得到的段子列表
            @param page 处理第几页
        """
        print item_list
        print "******* 第 %d 页 爬取完毕...*******" % page
        for item in item_list:
            self.writeToFile(item)

    def writeToFile(self, text):
        '''
            @brief 将数据追加写进文件中
            @param text 文件内容
        '''
        with open("d:/duanzi.txt", 'a') as myFile:
            myFile.write(text)
            myFile.write("\r\n-----------------------------------------------------")
            myFile.close()

    def doWork(self):
        '''
        让爬虫开始工作
        '''
        while self.enable:
            try:
                item_list = self.loadPage(self.page)
            except urllib2.URLError, e:
                print e.reason
                continue

            # 对得到的段子item_list处理
            self.printOnePage(item_list, self.page)
            self.page += 1  # 此页处理完毕,处理下一页
            print "按回车继续..."
            print "输入 quit 退出"
            command = raw_input()
            if (command == "quit"):
                break


if __name__ == '__main__':
    """
        ======================
            段子网小爬虫
        ======================
    """
    #定义一个Spider对象
    mySpider = Spider()
    mySpider.page = 1
    mySpider.enable = True
    mySpider.doWork()






  • 最后,我们执行我们的代码,完成后查看当前路径下的duanzi.txt文件,里面已经有了我们要的段子。

以上便是一个非常精简使用的小爬虫程序,使用起来很是方便,如果想要爬取其他网站的信息,只需要修改其中某些参数和一些细节就行了。

 

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值