# crawl **Repository Path**: GGBond5/crawl ## Basic Information - **Project Name**: crawl - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-25 - **Last Updated**: 2025-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python Web Crawler Framework 一个功能强大、灵活易用的Python网络爬虫框架,支持同步、异步和Selenium三种爬取方式。 ## 🚀 特性 - **多种爬虫类型**:基础爬虫、异步爬虫、Selenium爬虫 - **高性能**:支持并发请求和异步处理 - **智能重试**:自动重试机制和指数退避 - **数据处理**:内置数据清洗、去重、格式转换工具 - **配置灵活**:支持环境变量和配置文件 - **日志记录**:完整的日志系统 - **代理支持**:HTTP/HTTPS代理配置 - **反爬虫对策**:随机User-Agent、请求延迟等 ## 📦 安装 1. 克隆项目: ```bash git clone cd crawl ``` 2. 安装依赖: ```bash pip install -r requirements.txt ``` 3. (可选)安装浏览器驱动: - Chrome: 下载 [ChromeDriver](https://chromedriver.chromium.org/) - Firefox: 下载 [GeckoDriver](https://github.com/mozilla/geckodriver/releases) ## 🏗️ 项目结构 ``` crawl/ ├── crawler/ # 核心爬虫模块 │ ├── __init__.py │ ├── base_crawler.py # 基础爬虫类 │ ├── async_crawler.py # 异步爬虫类 │ └── selenium_crawler.py # Selenium爬虫类 ├── config/ # 配置模块 │ ├── __init__.py │ └── settings.py # 配置设置 ├── utils/ # 工具模块 │ ├── __init__.py │ ├── data_processor.py # 数据处理工具 │ ├── url_utils.py # URL工具 │ └── file_utils.py # 文件工具 ├── examples/ # 示例代码 │ ├── basic_example.py # 基础爬虫示例 │ ├── async_example.py # 异步爬虫示例 │ └── selenium_example.py # Selenium示例 ├── output/ # 输出目录 ├── logs/ # 日志目录 ├── screenshots/ # 截图目录 ├── requirements.txt # 依赖列表 └── README.md # 说明文档 ``` ## 🔧 快速开始 ### 1. 基础爬虫 ```python from crawler import BaseCrawler from utils import DataProcessor # 创建爬虫实例 crawler = BaseCrawler( base_url="https://example.com", delay_range=(1, 3) ) # 获取页面 response = crawler.get_page("https://example.com") soup = crawler.parse_html(response.text) # 提取数据 data = [] for item in soup.find_all('div', class_='item'): data.append({ 'title': item.find('h2').get_text(), 'content': item.find('p').get_text() }) # 保存数据 DataProcessor.save_to_json(data, 'output.json') crawler.close() ``` ### 2. 异步爬虫 ```python import asyncio from crawler import AsyncCrawler async def main(): crawler = AsyncCrawler(concurrent_requests=10, rate_limit=2.0) urls = ['https://example.com/page1', 'https://example.com/page2'] results = await crawler.fetch_multiple(urls) for result in results: if result['success']: print(f"成功爬取: {result['url']}") asyncio.run(main()) ``` ### 3. Selenium爬虫 ```python from crawler import SeleniumCrawler crawler = SeleniumCrawler(browser='chrome', headless=True) # 导航到页面 crawler.get_page("https://example.com") # 等待元素加载 crawler.wait_for_element('.dynamic-content') # 填写表单 crawler.fill_form({ '#username': 'your_username', '#password': 'your_password' }) # 点击按钮 crawler.click_element('#submit-btn') # 获取页面源码 soup = crawler.parse_html() crawler.close() ``` ## ⚙️ 配置 创建 `.env` 文件来自定义配置: ```env # 请求设置 REQUEST_TIMEOUT=30 REQUEST_RETRIES=3 CONCURRENT_REQUESTS=10 # 代理设置 HTTP_PROXY=http://proxy:8080 HTTPS_PROXY=https://proxy:8080 # 数据库设置 DATABASE_URL=sqlite:///crawler.db REDIS_URL=redis://localhost:6379 ``` ## 📊 数据处理 框架提供了丰富的数据处理工具: ```python from utils import DataProcessor # 清洗文本 clean_text = DataProcessor.clean_text(raw_text) # 提取邮箱 emails = DataProcessor.extract_emails(text) # 去重 unique_data = DataProcessor.deduplicate_data(data, key='url') # 保存为不同格式 DataProcessor.save_to_json(data, 'output.json') DataProcessor.save_to_csv(data, 'output.csv') DataProcessor.save_to_excel(data, 'output.xlsx') ``` ## 🔗 URL工具 ```python from utils import URLUtils # 验证URL is_valid = URLUtils.is_valid_url(url) # 规范化URL normalized = URLUtils.normalize_url(url) # 提取域名 domain = URLUtils.get_domain(url) # 过滤URL filtered_urls = URLUtils.filter_urls_by_domain(urls, ['example.com']) ``` ## 📝 示例 查看 `examples/` 目录中的完整示例: - `basic_example.py` - 基础爬虫使用示例 - `async_example.py` - 异步爬虫和分页处理 - `selenium_example.py` - JavaScript页面和交互操作 运行示例: ```bash python examples/basic_example.py python examples/async_example.py python examples/selenium_example.py ``` ## 🛡️ 反爬虫策略 框架内置多种反爬虫对策: - 随机User-Agent - 请求延迟和速率限制 - 代理轮换支持 - Session管理 - 自动重试机制 ## 📋 最佳实践 1. **尊重robots.txt**:检查目标网站的爬虫协议 2. **合理延迟**:设置适当的请求间隔 3. **错误处理**:实现完善的异常处理 4. **数据验证**:验证爬取的数据完整性 5. **日志记录**:记录爬虫运行状态 ## 🤝 贡献 欢迎提交Issue和Pull Request来改进这个框架! ## 📄 许可证 MIT License ## 🔧 故障排除 ### 常见问题 1. **ChromeDriver版本不匹配** ```bash # 更新ChromeDriver到匹配的版本 pip install --upgrade selenium ``` 2. **SSL证书错误** ```python # 在请求中忽略SSL验证 response = crawler.get_page(url, verify=False) ``` 3. **内存使用过高** ```python # 减少并发请求数 crawler = AsyncCrawler(concurrent_requests=5) ``` ### 性能优化 - 使用异步爬虫处理大量URL - 合理设置并发数和速率限制 - 定期清理临时文件和日志 - 使用数据库存储大量数据 ## 📞 支持 如有问题,请: 1. 查看示例代码 2. 检查日志文件 3. 提交Issue描述问题