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')
封装要点:
__init__初始化基础配置fetch_page处理HTTP请求parse_html负责数据解析crawl提供完整流程入口
调用方式:
- 实例化时传入基础URL
- 调用
crawl()一键执行 - 或分步调用
fetch_page()和parse_html()
总结建议: 类封装让爬虫更易维护和复用。
不理解你要干什么。
请记住,永远不要为了面向对象而面向对象。只有你需要它,你才用它。
因为是初学者,想事先尽可能多得掌握知识,不想等到需要用的时候才去学。。。
比如 def def getCommentsCounts(newsurl, self):,,,self.getCommentsCounts ?
class 是面向对象的思想,合理的设计需要你考虑每个类有什么属性

