zoukankan      html  css  js  c++  java
  • 爬虫(正则)——爬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()
  • 相关阅读:
    贴板子系列_1-km算法,匈牙利算法
    bzoj 2333
    bzoj 3531 旅行
    斯坦纳树
    可持久化线段树
    下界最小费用最大流
    我们还是太NAive
    ubuntu出现有线已连接却无法上网
    python小爬虫【1】
    [解答]对‘’未定义的引用 collect2: 错误: ld 返回 1
  • 原文地址:https://www.cnblogs.com/gaoquanquan/p/9113176.html
Copyright © 2011-2022 走看看