• 爬虫(正则)——爬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('<divsclass="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()
  • 相关阅读:
    前端面试的一道数组元素值去重问题
    数组元素前移,第一个元素放置数组末位
    Linux 查询oracle错误日志&警告日志
    CentOS 6.4 源码安装MySQL 5.6
    Oracle 表空间不足引起的问题及解决方法
    Oracle 强制中止正在执行的SQL语句
    request for member 'GetByteArrayElements'
    jni入门 eclipsecygwin+ndk
    ffmpeg结构体(二)
    ffmpeg结构体(三)
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9113176.html
Copyright © 2020-2023  润新知