# anjuke_spider **Repository Path**: cooltange/anjuke_spider ## Basic Information - **Project Name**: anjuke_spider - **Description**: 安居客二手房 爬虫 (采用 Playwright 框架) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2025-07-27 - **Last Updated**: 2026-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 安居客爬虫 ## 主要功能 1. 页码持久化功能: - 添加了 load_page_state() 和 save_page_state() 函数,用于读取和保存当前爬取的页码 - 使用 JSON 文件 page_state.json 存储页码信息 - 在遇到反爬机制或程序中断时自动保存当前页码 2. 翻页功能: - 在每页爬取完成后检测是否有下一页按钮 - 支持多种下一页按钮的选择器,提高兼容性 - 自动计算并访问下一页 3. 断点续爬: - 程序启动时自动从上次爬取的页码继续 - 遇到反爬机制时保存当前页码,下次可以从该页继续 - 添加了 --reset-page 命令行参数,可以手动重置页码从第1页开始爬取 4. 爬取控制: - 添加了 --max-pages 命令行参数,可以限制最大爬取页数 - 在页面之间添加随机等待时间,减少被反爬的风险 - 完善了异常处理和日志输出 5. 反爬处理: - 自动检测"访问过于频繁"等反爬提示 - 支持多次重试,可配置重试间隔和最大重试次数 - 在页面加载失败时尝试备用导航方法 6. 数据存储: - 支持将爬取的房源数据保存到CSV文件 - 按日期组织CSV文件,便于管理 - 支持将数据保存到MySQL数据库 - 可通过配置文件自定义MySQL连接参数 - 自动创建数据库和表结构 - 使用唯一索引避免重复数据 7. 城市和区域配置: - 支持通过命令行参数指定城市和区域拼音 - 默认爬取重庆市巴南区的房源数据 - 动态生成URL和文件名 8. 日志和调试: - 详细的日志记录,包括时间戳和操作步骤 - 保存页面HTML内容用于调试 - 按日期组织日志和调试文件 ## 使用方法 ```bash python spider/anjuke_spider_playwright_claude.py [选项] ``` ### 命令行参数 | 参数 | 说明 | |------|------| | `--headless` | 使用无头模式运行浏览器(默认) | | `--no-headless` | 使用有头模式运行浏览器,可以看到浏览器界面 | | `--retries N` | 设置最大重试次数,默认为3次 | | `--max-pages N` | 限制最大爬取页数,默认为无限制(直到没有下一页) | | `--reset-page` | 重置页码状态,从第1页开始爬取 | | `--city_pinyin` | 指定城市拼音,默认为"chongqing"(重庆) | | `--area_pinyin` | 指定区域拼音,默认为"banan"(巴南区) | ### 示例 ```bash # 使用默认参数爬取重庆巴南区的房源数据 python spider/anjuke_spider_playwright_claude.py # 爬取重庆渝北区的房源数据,限制最多爬取5页 python spider/anjuke_spider_playwright_claude.py --city_pinyin chongqing --area_pinyin yubei --max-pages 5 # 使用有头模式(可以看到浏览器界面)爬取成都武侯区的房源数据 python spider/anjuke_spider_playwright_claude.py --no-headless --city_pinyin chengdu --area_pinyin wuhou ``` ## MySQL配置 爬虫支持将爬取的房源数据保存到MySQL数据库。首次运行时,程序会在项目根目录下的`config`文件夹中创建`mysql_config.json`配置文件,默认配置如下: ```json { "host": "localhost", "port": 3306, "user": "root", "password": "", "database": "anjuke_spider", "table": "houses" } ``` 您可以根据自己的MySQL环境修改此配置文件。程序会自动创建数据库和表结构,无需手动创建。 ### 表名动态生成 程序会根据爬取的城市和区域自动生成表名,格式为:`houses_{city_pinyin}_{area_pinyin}` 例如: - 爬取重庆巴南区的数据,表名为:`houses_chongqing_banan` - 爬取成都武侯区的数据,表名为:`houses_chengdu_wuhou` 这样可以方便地将不同城市和区域的数据存储在不同的表中,便于管理和查询。 ### 数据表结构 程序会创建以下结构的数据表: | 字段名 | 类型 | 说明 | |-------|------|------| | id | INT | 自增主键 | | house_id | VARCHAR(100) | 房源唯一标识 | | title | VARCHAR(500) | 房源标题 | | total_price | VARCHAR(50) | 总价 | | unit_price | VARCHAR(50) | 单价 | | house_type | VARCHAR(50) | 户型 | | area | VARCHAR(50) | 面积 | | orientation | VARCHAR(50) | 朝向 | | build_year | VARCHAR(50) | 建造年份 | | floor | VARCHAR(50) | 楼层 | | city | VARCHAR(50) | 城市 | | area_detail | VARCHAR(50) | 区域 | | district | VARCHAR(50) | 区县 | | community | VARCHAR(100) | 小区名称 | | address | VARCHAR(255) | 地址 | | tags | TEXT | 标签 | | crawl_time | DATETIME | 爬取时间 | ## 爬虫配置 爬虫的配置信息存储在`config/spider.json`文件中,可以自定义以下参数: ```json { "retry_wait_seconds": 60, "max_retry_times": 3 } ``` | 参数 | 说明 | |------|------| | `retry_wait_seconds` | 遇到反爬机制时的等待秒数 | | `max_retry_times` | 最大重试次数 | ## 项目结构 ``` ├── config/ # 配置文件目录 │ ├── mysql_config.json # MySQL数据库配置 │ └── spider.json # 爬虫配置 ├── csv/ # CSV数据存储目录(按日期组织) ├── db/ # 数据库相关文件 │ └── create_table.ddl # 数据表创建脚本 ├── debug/ # 调试文件目录(按日期组织) ├── log/ # 日志文件目录(按日期组织) ├── spider/ # 爬虫脚本目录 │ ├── anjuke_spider_playwright_claude.py # 主爬虫脚本 │ └── page_state.json # 页码状态文件 └── utils/ # 工具模块 ├── __init__.py └── mysql_handler.py # MySQL数据处理模块 ``` ## 依赖安装 在运行爬虫前,请确保已安装所需的依赖: ```bash pip install -r requirements.txt ``` 主要依赖包括: - playwright:用于浏览器自动化 - mysql-connector-python:用于MySQL数据库连接 ## 注意事项 1. **首次运行**:首次运行时,需要安装Playwright浏览器: ```bash python -m playwright install chromium ``` 2. **反爬处理**:安居客网站有较为严格的反爬机制,建议: - 不要设置过小的等待时间 - 使用`--max-pages`参数限制单次爬取的页数 - 避免频繁爬取同一区域 3. **数据存储**: - CSV文件默认保存在`csv/日期/`目录下 - 日志文件保存在`log/日期/`目录下 - 调试文件保存在`debug/日期/`目录下 4. **错误处理**: - 如果遇到"访问过于频繁"的提示,程序会自动等待并重试 - 如果多次重试后仍然失败,建议更换IP或等待一段时间后再试 ## 许可证 MIT License ## 贡献 欢迎提交Issue和Pull Request来改进这个爬虫项目。