小白爬虫笔记(4)| 用爬虫框架功能来爬取糗事百科数据

大家好,作为一名互联网行业的小白,写博客只是为了巩固自己学习的知识,但由于水平有限,博客中难免会有一些错误出现,有不妥之处恳请各位大佬指点一二!
博客主页:链接: https://blog.csdn.net/weixin_52720197?spm=1018.2118.3001.5343
在这里插入图片描述

1.导入所需要的包

from fake_useragent import UserAgent
import requests
from lxml import etree

2.设计框架

# 发送请求
class Downloader():
    def do_download(self, url):
    	headers = {'User-Agent': UserAgent().chrome}
    	# 做出相应
        resp = requests.get(url, headers=headers)
        if resp.status_code == 200:
            resp.encoding = 'utf-8'
            return resp.text
      


# 数据解析
class Parser():
    def do_parse(self, html):
        pass


# 数据保存
class DataOutPut():
    def do_save(self, datas):
        pass

# URL管理器
class URLManager():
    def __init__(self):
         # 需要爬的
        self.new_url = set()
        # 已经爬的
        self.old_url = set()

    # 加入一个Url
    def add_new_url(self, url):
    #严谨url不能为空,不能为空字符串,也不能在爬取过的url里面
        if url is not None and url != '' and url not in self.old_url:
            self.new_url.add(url)

    # 加入多个Url
    def add_new_urls(self, urls):
        for url in urls:
        # 判断,直接调用上面的方法
            self.add_new_url(url)

    # 获取一个Url
    def get_new_url(self):
    	# 取出一个url并删除,pop表示删除
        url = self.new_url.pop()
        # 将用完的url加入old中,用来判断是否用过
        self.old_url.add(url)
        return url

    # 获取还有多少个Url要爬取
    def get_new_url_size(self):
        return len(self.new_url)

    # 获取是否还有Url要爬取
    def have_new_url(self):
        return self.get_new_url_size() > 0

#数据调度器,调度四个个类
class Scheduler:
    def __init__(self):
    	# 下载器
        self.downloader = Downloader()
        # 解析器
        self.parser = Parser()
        self.data_out_put = DataOutPut()
        self.url_manger = URLManager()

    def start(self, url):
        self.url_manger.add_new_url(url)
        while self.url_manger.have_new_url():
            url = self.url_manger.get_new_url()
            html = self.downloader.do_download(url)
            datas, urls = self.parser.do_parse(html)
            self.data_out_put.do_save(datas)
            self.url_manger.add_new_urls(urls)


if __name__ == '__main__':
    pass

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值