爬虫框架 - Coocan

安装

  • pip install coocan

演示

代码

python 复制代码
import json

import coocan
from coocan import Request, MiniSpider
from loguru import logger

# 可以改成你自己的 CSDN 名称
username = "markadc"


class CSDNDetailSpider(MiniSpider):
    start_urls = ['http://www.csdn.net']
    max_requests = 10

    def middleware(self, request: Request):
        request.headers["Referer"] = "http://www.csdn.net/"

    def parse(self, response):
        api = "https://blog.csdn.net/community/home-api/v1/get-business-list"
        params = {
            "page": "1",
            "size": "20",
            "businessType": "lately",
            "noMore": "false",
            "username": username
        }
        yield Request(api, self.parse_page, params=params, cb_kwargs={"api": api, "params": params})

    def parse_page(self, response, api, params):
        current_page = params["page"]
        data = json.loads(response.text)
        some = data["data"]["list"]

        if not some:
            logger.warning("没有第 {} 页".format(current_page))
            return

        for one in some:
            date = one["formatTime"]
            name = one["title"]
            detail_url = one["url"]
            logger.info(
                """
                {} 
                {} 
                {}
                """.format(date, name, detail_url)
            )
            yield coocan.Request(detail_url, self.parse_detail, cb_kwargs={"title": name})

        logger.info("第 {} 页抓取成功".format(params["page"]))

        # 抓取下一页
        next_page = int(current_page) + 1
        params["page"] = str(next_page)
        yield Request(api, self.parse_page, params=params, cb_kwargs={"api": api, "params": params})

    def parse_detail(self, response, title):
        logger.success("{}  已访问 {}".format(response.status_code, title))


if __name__ == '__main__':
    s = CSDNDetailSpider()
    s.go()
相关推荐
slacker-kian3 分钟前
[笔记]-什么是相似性搜索?
python·ai·向量·相似性搜索·点积·l2 距离·余弦相似度和距离
阿童木写作9 分钟前
跨境电商图片翻译工具,批量翻译视频字幕还免费
python·音视频
sukioe10 分钟前
城智连响:基于 LangGraph 与四库分层架构的城市公共设施智能报修与派单系统
人工智能·python·ai·架构·langchain
卷无止境1 小时前
Coding Agent 里的上下文 Compact,到底在压缩什么
后端·python
Patrick在香港1 小时前
Claude Prompt Caching 实测账单:第一轮贵 25%,从第二轮开始省 86%
python·prompt·claude·成本优化·prompt缓存·anthropic api
新时代牛马1 小时前
字符设备注册:从cdev_add 到chrdev_open 的 VFS路径
python
life1691 小时前
python requests采集同花顺F10、龙虎榜数据
python·同花顺·龙虎榜
angushine1 小时前
qwen3-tts使用实例
python·tts
陈年老古董2 小时前
OpenCV实战:文档扫描与图像风格迁移
人工智能·python·opencv·计算机视觉
benchmark_cc2 小时前
数据 API 稳定性为什么会影响量化策略?从数据获取到信号执行的完整分析
开发语言·python·数据分析·量化·股票数据·quantdash·量化数据源