爬虫框架 - 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()
相关推荐
red润5 分钟前
python win32COM 对象介绍调用Word、WPS 与应用生态
python
旦莫6 分钟前
Python测试开发工具库:测试环境变量统一配置与加载工具
python·测试开发·自动化·ai测试
Hello.Reader7 分钟前
Flink Avro Format Java / PyFlink 读写、Schema 细节与坑点总结
java·python·flink
小当家.10518 分钟前
从零构建项目认知:如何画出一张合格的系统架构图(以供应链系统为例)
java·spring boot·学习·架构·系统架构·供应链·实习
我是海飞27 分钟前
杰理 AC792N WebSocket 客户端例程使用测试教程
c语言·python·单片机·websocket·网络协议·嵌入式·杰理
shy^-^cky39 分钟前
Python程序设计完整复习要点(含实例)
python·期末复习
做萤石二次开发的哈哈1 小时前
萤石开放平台 萤石可编程设备 | 设备脚本自定义开发
开发语言·python·萤石云·萤石·萤石开放平台
liu****1 小时前
能源之星案例
人工智能·python·算法·机器学习·能源