爬虫框架 - 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()
相关推荐
zhaoshuzhaoshu10 分钟前
设计模式之行为型设计模式详解
python·设计模式
不知名XL32 分钟前
day01 agent开发基础铺垫
python
Old Uncle Tom36 分钟前
Claude Code 记忆系统架构分析
人工智能·ai·系统架构·agent
-To be number.wan38 分钟前
Python爬取百度指数保姆级教程
爬虫·python
hnxaoli1 小时前
win10小程序(十八)剪切板循环粘贴
python·小程序
APIshop1 小时前
Java获取淘宝商品价格、图片与视频:淘宝开放平台API实战指南
开发语言·python
唐叔在学习1 小时前
Python移动端应用消息提醒开发实践
开发语言·python
好家伙VCC1 小时前
**发散创新:基于Python与OpenCV的视频流帧级分析实战**在当前人工智能与计算机视觉飞速发展的背景下
java·人工智能·python·计算机视觉
xiaotao1311 小时前
阶段零:IDE选择 与 Jupyter Notebook / Lab 使用
ide·人工智能·python·jupyter