A simple Python library for web crawler
Project description
PyOctopus
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/ # 工具函数
最佳实践
- 合理使用限速控制,避免对目标站点造成压力
- 选择合适的解析方式,提高解析效率
- 使用优先级控制抓取顺序
- 做好异常处理和日志记录
- 合理设置线程数量
开发指南
打包项目
- 安装打包工具
pip install build twine
- 构建项目
python3 setup.py sdist bdist_wheel
这将在 dist/ 目录下生成源码包(.tar.gz)和轮子包(.whl)。
- 清理构建文件
# 清理构建文件
python3 setup.py clean --all # 清理 build 目录
rm -rf dist/ # 删除 dist 目录
rm -rf *.egg-info/ # 删除 egg-info 目录
发布到 PyPI
-
注册 PyPI 账号 访问 PyPI 注册账号。
-
创建 API Token 在 PyPI 账号设置中创建 API Token,用于发布认证。
-
配置认证信息 创建或编辑
~/.pypirc文件:
[pypi]
username = __token__
password = your-api-token
- 上传到 PyPI
twine upload dist/*
- 验证安装
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
pyoctopus-0.1.7-py3-none-any.whl
(29.4 kB
view details)
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4c62cb51a1684c3124d5558f993006525bd376ef36b5c4d7f0f3def987d7986
|
|
| MD5 |
a75de8b8076ef1205a17d9169d59c97f
|
|
| BLAKE2b-256 |
39a5ab6513eb270b9deae85bd240876e08668bcbbc8b5f63a9fc4b1f2ac5973f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0dccd45a2ba67498c3b35676d9e43e7e668288ec4661ee903ac310cfeadd4dba
|
|
| MD5 |
d7abfdfcfc7cbf08aedf8dd8f38209fe
|
|
| BLAKE2b-256 |
96aacc7982db35d366bc3214c86df3acdae7667dbcacc4e06f1ea0836de88a7e
|