Skip to main content

A simple Python library for web crawler

Project description

PyOctopus

Python Version License Code Style

PyOctopus 是一个强大的多线程爬虫框架,提供了丰富的内容提取方式和灵活的数据处理机制。

核心特性

  • 多线程抓取: 支持多线程并发抓取,内置限速控制
  • 多种解析器: 支持 XPath、CSS、JsonPath、正则表达式等多种解析方式
  • 数据存储: 支持 SQLite、Redis 等多种存储方式
  • 灵活扩展: 支持自定义处理器和收集器
  • 智能调度: 支持请求优先级和可重复性控制

快速开始

安装

pip install pyoctopus

基础示例

import pyoctopus

# 定义数据模型
@pyoctopus.hyperlink(
    pyoctopus.link(pyoctopus.css('.item a', multi=True, attr='href'),
                   repeatable=False, priority=1)
)
class ProjectDetails:
    name = pyoctopus.css('.project-title', text=True)
    description = pyoctopus.css('.project-desc', text=True)
    tags = pyoctopus.css('.tag', text=True, multi=True)

# 配置爬虫
sites = [
    pyoctopus.site('example.com', limiter=pyoctopus.limiter(1))
]

processors = [
    (pyoctopus.url_matcher(r'.*'), pyoctopus.extractor(ProjectDetails))
]

# 启动爬虫
octopus = pyoctopus.new(processors=processors, sites=sites, threads=4)
octopus.start('https://example.com')

高级特性

1. 多种解析方式

class DataModel:
    # XPath 提取
    title = pyoctopus.xpath('//h1/text()')

    # CSS 选择器
    description = pyoctopus.css('.content p', text=True)

    # JsonPath 提取
    data = pyoctopus.jsonpath('$.data.items[*]')

    # 正则表达式
    id = pyoctopus.regex(r'ID:(\d+)', group=1)

2. 数据存储

# SQLite 存储
store = pyoctopus.sqlite_store('data.db', table='spider_data')

# Redis 存储
store = pyoctopus.redis_store(prefix='spider', password='123456')

3. 自定义收集器

# Excel 收集器
excel_collector = pyoctopus.excel_collector('output.xlsx', columns=[
    pyoctopus.excel_column('name', '名称'),
    pyoctopus.excel_column('description', '描述'),
    pyoctopus.excel_column('tags', '标签',
                          style=pyoctopus.excel_style(delimiter='、'))
])

# 日志收集器
logging_collector = pyoctopus.logging_collector()

4. 请求控制

# 站点配置
sites = [
    pyoctopus.site('example.com',
                   proxy='http://127.0.0.1:7890',        # 代理设置
                   limiter=pyoctopus.limiter(0.5))       # 限速配置
]

# 请求属性
request = pyoctopus.request(
    url='https://example.com',
    priority=1,                # 优先级
    repeatable=False,         # 是否可重复
    attrs={'category': 'news'} # 自定义属性
)

项目结构

pyoctopus/
├── core/           # 核心实现
├── processor/      # 处理器
├── selector/       # 选择器
├── store/          # 存储实现
└── utils/          # 工具函数

最佳实践

  1. 合理使用限速控制,避免对目标站点造成压力
  2. 选择合适的解析方式,提高解析效率
  3. 使用优先级控制抓取顺序
  4. 做好异常处理和日志记录
  5. 合理设置线程数量

开发指南

打包项目

  1. 安装打包工具
pip install build twine
  1. 构建项目
python3 setup.py sdist bdist_wheel

这将在 dist/ 目录下生成源码包(.tar.gz)和轮子包(.whl)。

  1. 清理构建文件
# 清理构建文件
python3 setup.py clean --all   # 清理 build 目录
rm -rf dist/                   # 删除 dist 目录
rm -rf *.egg-info/            # 删除 egg-info 目录

发布到 PyPI

  1. 注册 PyPI 账号 访问 PyPI 注册账号。

  2. 创建 API Token 在 PyPI 账号设置中创建 API Token,用于发布认证。

  3. 配置认证信息 创建或编辑 ~/.pypirc 文件:

[pypi]
username = __token__
password = your-api-token
  1. 上传到 PyPI
twine upload dist/*
  1. 验证安装
pip install pyoctopus

贡献指南

欢迎提交 Pull Request 或 Issue。详见 CONTRIBUTING.md

开源协议

本项目采用 MIT 协议,详见 LICENSE 文件。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyoctopus-0.2.3.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyoctopus-0.2.3-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file pyoctopus-0.2.3.tar.gz.

File metadata

  • Download URL: pyoctopus-0.2.3.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.11

File hashes

Hashes for pyoctopus-0.2.3.tar.gz
Algorithm Hash digest
SHA256 9cf4dfe9ba3f1c5d604a55a65687089290956e86133d7f1a47745020f308e4f4
MD5 da191de5cfd1f89f49c2fa6e18232abc
BLAKE2b-256 dc7b7c2f4a0d59d78d1543449f52608269926ac362b444696e8ac7066c486d17

See more details on using hashes here.

File details

Details for the file pyoctopus-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: pyoctopus-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.11.11

File hashes

Hashes for pyoctopus-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6010bcfe68d80308744bdaadb250e5ec98e1009d0cec4d490b0f1a7b182ac4a3
MD5 4e4cc0958ce4fd94a3dee985b46746c6
BLAKE2b-256 981436bc914d7dd5cc51b9d7a5817beacb388c3db7104f6b88ab161d6d118d43

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page