上面是我们爬取的原网页:今日热榜官网

一、项目背景与工具特性

DrissionPage 是一款新兴的 Python 网页自动化工具,结合了 requests 与 selenium 的优点,既能高效处理动态加载页面,又无需依赖浏览器驱动。本文将通过实战演示如何用其抓取 CSDN 实时热榜数据。

二、环境准备:

# 安装核心库
pip install DrissionPage

三、完整爬虫代码和运行结果:

找到主要的框架标签直接定位:

可以看见我们的定位的位置,每个框架的 css 的 class 属性但是‘dc-cc’,这样我们可以直接定位了。

from DrissionPage import SessionPage
 
 
class DailyHot:
    def __init__(self):
        self.base_url = 'https://tophub.today/'
        self.hot_items = []
 
    def fetch_data(self):
        """执行网络请求获取页面内容"""
        page = SessionPage()
        try:
            page.get(self.base_url)
            return page
        except Exception as e:
            raise RuntimeError(f"请求失败: {str(e)}")
 
    def parse_data(self, page):
        """解析页面提取目标数据"""
        # 根据实际页面结构调整选择器(重要!)
        css_selector = '.bc-cc'  # 示例选择器,需用浏览器开发者工具确认
        items = page.eles(css_selector)
 
        if not items:
            raise ValueError("未找到目标元素,请检查选择器")
 
        return [item.text for item in items]
 
    def format_output(self):
        """格式化输出结果"""
        print("\n🔥 今日热榜 Top20:")
        for idx, item in enumerate(self.hot_items[:20], 1):
            print(f"{idx:2d}. {item}")
        print(f"\n共获取到 {len(self.hot_items)} 条数据")
 
    def run(self):
        """主执行流程"""
        try:
            page = self.fetch_data()
            self.hot_items = self.parse_data(page)
            self.format_output()
        except Exception as e:
            print(f"❌ 运行出错: {str(e)}")
            print("请检查:1. 网络连接 2. CSS选择器 3. 网站结构是否变化")
 
 
if __name__ == '__main__':
    spider = DailyHot()
    spider.run()

结果展示:

对比第一个和最后一个的内容发现我们抓取的正确性,说明我们抓取成功了。

四、代码深度解析

1. 类结构设计

class CSDNHotSpider:
    def __init__(self):
        self.base_url = 'https://blog.csdn.net/phoenix/web/blog/hot-rank'  # 热榜API地址
        self.hot_articles = []  # 存储结构化数据
  • 设计要点:采用面向对象封装,提升代码复用性和可维护性
  • URL 选择:直接调用 CSDN 热榜 API 接口,避免解析复杂页面

2. 网络请求模块

def fetch_page(self):
    page = SessionPage()
    page.headers.update({
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Referer': 'https://blog.csdn.net/'
    })
    page.get(self.base_url)
    return page
  • SessionPage:轻量级请求会话,支持自动管理 cookies
  • 请求头设置:模拟浏览器特征,降低被封禁风险
  • 异常处理:外层 try-catch 统一捕捉网络错误

3. 数据解析模块

def parse_articles(self, page):
    items = page.eles('.blog-rank-list-item')  # 条目容器选择器
    parsed_data = []
    for item in items:
        parsed_data.append({
            '标题': item.ele('a.title::text').text.strip(),
            '链接': item.ele('a.title::attr(href)').attr('href'),
            '作者': item.ele('.nick-name::text').text.strip(),
            '热度': item.ele('.read-num::text').text
        })
    return parsed_data
  • 层级解析:先定位条目容器,再提取子元素
  • 复合选择器
    • a.title::text 获取标题文本
    • ::attr(href) 提取链接属性
    • .read-num::text 获取阅读量
  • 数据清洗:使用.strip()去除空白字符

4. 可视化输出

def show_result(self):
    print("\n🔥 CSDN实时热榜TOP10:")
    for idx, article in enumerate(self.hot_articles[:10], 1):
        print(f"{idx:02d}. [{article['热度']}] {article['标题']}")
        print(f"    作者:{article['作者']}")
        print(f"    链接:{article['链接'][:50]}...")
  • 格式化输出:使用 f-string 实现对齐和截断
  • TOP10 展示:限制显示条目提升可读性

五、执行效果演示

🔥 CSDN实时热榜TOP10:
01. [15.8w] Python高级技巧:装饰器的十大应用场景
    作者:算法小王子
    链接:https://blog.csdn.net/xxx/article/details/123456...
02. [12.3w] 如何用30行代码实现人脸识别
    作者:AI架构师
    链接:https://blog.csdn.net/yyy/post/987654...
...
✅ 成功获取 50 条热榜数据

六、关键问题处理方案

1. 反爬机制应对

# 随机UA生成
from fake_useragent import UserAgent
ua = UserAgent()
page.headers = {'User-Agent': ua.random}
 
# 代理设置
page.set.proxies({'http': 'http://127.0.0.1:1080'})
 
# 请求间隔
import time
time.sleep(random.uniform(1,3))

2. 选择器维护策略

  • 定期使用 Chrome 开发者工具验证元素结构(F12)
  • 使用相对选择路径而非绝对 class 名
  • 添加选择器异常监控:
try:
    title = item.ele('a.title::text').text
except ElementNotFound:
    title = 'N/A'

七、数据处理

我们可以对我们抓取的项目来保存到本地,来实时更新数据进行数据可视化的操作。

八、项目扩展方向

  1. 数据持久化:接入 MySQL/MongoDB 存储历史数据
  2. 定时任务:使用 APScheduler 实现每小时自动抓取
  3. 可视化分析:用 Pyecharts 生成热度趋势图
  4. 异常监控:集成 Sentry 进行错误报警

通过本案例可以掌握 DrissionPage 的核心使用方法,该工具在应对动态渲染页面时展现出的高效性,使其成为新一代 Python 爬虫开发的优选方案。建议开发时始终遵守网站的 robots.txt 协议,控制请求频率避免对目标服务器造成压力。

 

获取资源前请仔细阅读一下声明:

重要提示

如有解压密码: 看下载页、看下载页、看下载页。
源码工具资源类具有可复制性: 建议具有一定思考和动手能力的用户购买。
请谨慎考虑: 小白用户和缺乏思考动手能力者不建议赞助。
虚拟商品购买须知: 虚拟类商品,一经打赏赞助,不支持退款。请谅解,谢谢合作!
声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。