Python新手写了一个简易爬虫,如何将其封装到类中并正常调用?

新手初学 python 后写了一个简易爬虫,想要做一个交互界面,但不知道该如何加入到 class 里并正常调用,参照网上的很多面向对象的教程却总是做不对。下面的源码可以正常使用,只写了 def,但没有写进 class 的源码,请求大神提点帮助!

源码地址:https://gitee.com/rufengkj/zwu_educational_system/blob/master/sina新浪新闻/Sina_News.py
Python新手写了一个简易爬虫,如何将其封装到类中并正常调用?

6 回复

我不知道为什么你一定要封装成 class,不封装也不错感觉。
如果想做,直接用 class 包起来就好了,每一个函数参数前面需要加上 self,如果函数之间相互调用前面也加上 self.函数名,调用的时候,from。。import 就好,先实例化,然后使用


import requests
from bs4 import BeautifulSoup

class SimpleCrawler:
    def __init__(self, base_url, headers=None):
        """
        初始化爬虫类
        :param base_url: 基础URL
        :param headers: 请求头,默认为None
        """
        self.base_url = base_url
        self.headers = headers or {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        }
        self.session = requests.Session()
    
    def fetch_page(self, url=None):
        """
        获取页面内容
        :param url: 要抓取的URL,默认为None时使用base_url
        :return: 页面文本内容
        """
        target_url = url or self.base_url
        try:
            response = self.session.get(target_url, headers=self.headers, timeout=10)
            response.raise_for_status()
            return response.text
        except requests.RequestException as e:
            print(f"请求失败: {e}")
            return None
    
    def parse_html(self, html_content, selector='a', attr='href'):
        """
        解析HTML内容,提取指定元素
        :param html_content: HTML内容
        :param selector: CSS选择器,默认提取所有链接
        :param attr: 要提取的属性,默认提取href
        :return: 提取结果列表
        """
        if not html_content:
            return []
        
        soup = BeautifulSoup(html_content, 'html.parser')
        elements = soup.select(selector)
        return [element.get(attr) for element in elements if element.get(attr)]
    
    def crawl(self, selector='a', attr='href'):
        """
        执行完整的爬取流程
        :param selector: CSS选择器
        :param attr: 要提取的属性
        :return: 提取结果列表
        """
        html = self.fetch_page()
        if html:
            return self.parse_html(html, selector, attr)
        return []

# 使用示例
if __name__ == "__main__":
    # 创建爬虫实例
    crawler = SimpleCrawler('https://example.com')
    
    # 方法1: 完整流程
    links = crawler.crawl()
    print(f"找到 {len(links)} 个链接")
    
    # 方法2: 分步调用
    html_content = crawler.fetch_page()
    if html_content:
        titles = crawler.parse_html(html_content, selector='h1', attr='text')
        print(f"页面标题: {titles}")
    
    # 方法3: 抓取其他页面
    other_page_links = crawler.fetch_page('https://example.com/other-page')

封装要点:

  1. __init__初始化基础配置
  2. fetch_page处理HTTP请求
  3. parse_html负责数据解析
  4. crawl提供完整流程入口

调用方式:

  • 实例化时传入基础URL
  • 调用crawl()一键执行
  • 或分步调用fetch_page()parse_html()

总结建议: 类封装让爬虫更易维护和复用。

不理解你要干什么。

请记住,永远不要为了面向对象而面向对象。只有你需要它,你才用它。

因为是初学者,想事先尽可能多得掌握知识,不想等到需要用的时候才去学。。。

比如 def def getCommentsCounts(newsurl, self):,,,self.getCommentsCounts ?

class 是面向对象的思想,合理的设计需要你考虑每个类有什么属性

回到顶部