爬虫(正则)——爬neihan8

工具:python3

步骤:

1)定义spider类,将具体功能封装成方法

2)观察html页面,写好正确的正则表达式来找到符合规则的文字

3)写一个方法测试一下,保证每写好一个都是对的

4)加入提示语,完善每个方法

5)得到的页面发现乱码,需要将response进行decode,尝试utf-8提示 错误,gbk得到想要的页面!开心!

# coding:utf-8
import urllib.request
import re


class Spider:
    def __init__(self):
        # 初始化其实页面
        self.page = 1
        # 爬取开关,true继续爬取
        self.switch = True

    def loadPage(self):
        """
        下载页面
        """
        print("正在下载数据。。。。。。")
        url = "http://www.neihan8.com/article/list_5_" + str(self.page) + ".html"
        headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
           }
        request = urllib.request.Request(url, headers=headers)
        html = urllib.request.urlopen(request).read()

        # 获取每页的HTML源码字符串
        html = html.decode("gbk")

        # 创建正则表达式规则,匹配每页里的段子内容,re.S表示匹配全部字符串内容
        pattern = re.compile('<div\sclass="f18 mb20">(.*?)</div>', re.S)

        # 返回所有段子的列表
        content_list = pattern.findall(str(html))

        self.dealPage(content_list)

    def dealPage(self, content_list):
        """
        处理每页的段子
        :return:
        """

        for item in content_list:
            item = item.replace("<p>","").replace("<br />","").replace("</p>","")
            self.writePage(item)
            print("正在写入数据。。。。。。")

    def writePage(self,item):
        """
        把每条段子逐个写入文件
        """
        with open("duanzi.txt","a") as f:
            f.write(item)

    def startWork(self):
        """
        控制爬虫运行
        :return:
        """
        while self.switch:
            self.loadPage()
            commend = input("如果继续爬取请按回车(退出按q)")
            if commend =="q":
                self.switch = False

            # 每次循环页面+1
            self.page += 1


if __name__ == "__main__":
    duanziSpider = Spider()
    duanziSpider.startWork()

 

posted @ 2018-05-30 20:36  高圈圈  阅读(919)  评论(0编辑  收藏  举报