跳转至

快速开始

1. 生成项目

pip install "netspy[cli]"
netspy create -p news_crawler

生成:

news_crawler/
├── main.py                入口
├── setting.py             项目配置(运行时自动加载)
├── spiders/
│   └── news_crawler_spider.py
└── items/

2. 改爬虫

spiders/news_crawler_spider.py

import netspy as mw


class NewsCrawlerSpider(mw.AirSpider):
    def start_requests(self):
        yield mw.Request("https://news.ycombinator.com/", callback=self.parse)

    def parse(self, request, response):
        for row in response.css("span.titleline > a"):
            yield {
                "title": row.css("::text").get(),
                "url": row.css("::attr(href)").get(),
            }

3. 运行

cd news_crawler && python main.py
scheduler - 爬虫启动(4 个工作线程)
scheduler - 种子请求 1 条
pipeline.console - [items] {"title": "...", "url": "..."}
scheduler - 爬虫结束 | 请求成功 1 | 入库 30 条(去重 0,失败 0)

默认走 ConsolePipeline(打日志)。要落库,改 setting.pyITEM_PIPELINES

4. 调试选择器

netspy shell https://news.ycombinator.com/
>>> response.css("span.titleline > a::text").getall()

常见调整

setting.py 里:

SPIDER_THREAD_COUNT = 8
SPIDER_MAX_RETRY_TIMES = 5
ITEM_PIPELINES = [
    "netspy.pipelines.mongo.MongoPipeline",
]
MONGO_URI = "mongodb://localhost:27017"
MONGO_DB = "news"

或用环境变量:NETSPY_SPIDER_THREAD_COUNT=8 python main.py

完整示例

仓库的 examples/ 里有可以直接跑的例子:

python examples/books_toscrape.py

演示两级抓取(列表页翻页 → 详情页)、cb_kwargs 传状态、Item 去重, 以及真实站点上该配的礼貌性设置。