爬虫(正则)——爬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()

 

转载于:https://www.cnblogs.com/gaoquanquan/p/9113176.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值