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.1.7.tar.gz (22.7 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.1.7-py3-none-any.whl (29.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for pyoctopus-0.1.7.tar.gz
Algorithm Hash digest
SHA256 e4c62cb51a1684c3124d5558f993006525bd376ef36b5c4d7f0f3def987d7986
MD5 a75de8b8076ef1205a17d9169d59c97f
BLAKE2b-256 39a5ab6513eb270b9deae85bd240876e08668bcbbc8b5f63a9fc4b1f2ac5973f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pyoctopus-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 29.4 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.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 0dccd45a2ba67498c3b35676d9e43e7e668288ec4661ee903ac310cfeadd4dba
MD5 d7abfdfcfc7cbf08aedf8dd8f38209fe
BLAKE2b-256 96aacc7982db35d366bc3214c86df3acdae7667dbcacc4e06f1ea0836de88a7e

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