Skip to content

xfdb88/redesigned-couscous6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Web Scraper - 网页爬虫项目

一个功能完整的Python网页爬虫项目,使用Requests和BeautifulSoup库构建。

功能特性 (Features)

  • ✅ 使用 Requests 和 BeautifulSoup 抓取网页内容
  • ✅ 解析提取关键信息(标题、链接、正文内容、图片等)
  • ✅ 支持翻页功能,自动抓取多页数据
  • ✅ 支持结构化数据导出(CSV/JSON格式)
  • ✅ 完善的异常处理机制
  • ✅ 请求延迟控制,避免对服务器造成压力
  • ✅ 遵守 robots.txt 协议
  • ✅ 支持自定义请求头
  • ✅ 支持代理设置
  • ✅ 模块化设计,易于扩展

项目结构 (Project Structure)

.
├── scraper/              # 爬虫核心模块
│   ├── __init__.py      # 包初始化
│   ├── web_scraper.py   # 主爬虫类
│   ├── parser.py        # 数据解析模块
│   ├── output.py        # 文件输出模块
│   └── pagination.py    # 翻页处理模块
├── config/              # 配置文件
│   └── config.py        # 配置参数
├── data/                # 数据输出目录
├── tests/               # 测试文件
├── main.py              # 主程序入口
└── requirements.txt     # 项目依赖

安装 (Installation)

1. 克隆项目

git clone https://github.com/xfdb88/redesigned-couscous6.git
cd redesigned-couscous6

2. 安装依赖

pip install -r requirements.txt

使用方法 (Usage)

快速开始

1. 抓取单个页面

from scraper.web_scraper import WebScraper
from scraper.parser import DataParser
from scraper.output import OutputHandler

# 初始化组件
scraper = WebScraper()
parser = DataParser()
output = OutputHandler()

# 抓取页面
url = 'https://example.com'
html = scraper.fetch(url)

# 解析数据
data = parser.parse(html, url)

# 保存数据
output.save_json(data, 'result.json')
output.save_links_csv(data['links'], 'links.csv')

scraper.close()

2. 抓取多个页面(自动翻页)

from scraper.web_scraper import WebScraper
from scraper.parser import DataParser
from scraper.pagination import PaginationHandler
from scraper.output import OutputHandler

# 初始化组件
scraper = WebScraper()
parser = DataParser()
pagination = PaginationHandler(scraper, parser)
output = OutputHandler()

# 抓取多页
all_data = pagination.scrape_pages(
    start_url='https://example.com/page1',
    max_pages=5
)

# 保存数据
output.save_json(all_data, 'all_pages.json')

scraper.close()

3. 抓取编号页面

from scraper.pagination import PaginationHandler
from scraper.web_scraper import WebScraper
from scraper.parser import DataParser

scraper = WebScraper()
parser = DataParser()
pagination = PaginationHandler(scraper, parser)

# 抓取第1-10页
all_data = pagination.scrape_numbered_pages(
    url_pattern='https://example.com/page/{}',
    start_page=1,
    end_page=10
)

scraper.close()

配置说明

config/config.py 中可以配置:

爬虫配置

SCRAPER_CONFIG = {
    'headers': {
        'User-Agent': '你的User-Agent'
    },
    'proxy': {  # 可选
        'http': 'http://proxy.example.com:8080',
        'https': 'https://proxy.example.com:8080'
    },
    'delay': 1,  # 请求延迟(秒)
    'timeout': 10,  # 请求超时(秒)
    'respect_robots': True  # 是否遵守robots.txt
}

解析器配置

PARSER_CONFIG = {
    'parser': 'lxml'  # 可选: 'lxml', 'html.parser', 'html5lib'
}

输出配置

OUTPUT_CONFIG = {
    'output_dir': 'data',
    'json_filename': 'scraped_data.json',
    'csv_filename': 'scraped_data.csv'
}

运行示例程序

python main.py

编辑 main.py 中的示例函数调用,设置你的目标URL后运行。

API 文档

WebScraper 类

主要方法:

  • fetch(url): 抓取单个URL的HTML内容
  • fetch_multiple(urls): 抓取多个URL
  • can_fetch(url): 检查是否允许抓取(robots.txt)
  • close(): 关闭会话

DataParser 类

主要方法:

  • parse(html, base_url): 解析HTML并提取数据
  • extract_title(soup): 提取页面标题
  • extract_links(soup, base_url): 提取所有链接
  • extract_content(soup): 提取主要内容
  • extract_meta(soup): 提取元数据
  • extract_headings(soup): 提取标题标签
  • extract_images(soup, base_url): 提取图片
  • extract_pagination_links(soup, base_url): 提取翻页链接

OutputHandler 类

主要方法:

  • save_json(data, filename): 保存为JSON格式
  • save_csv(data, filename, fieldnames): 保存为CSV格式
  • save_links_csv(links, filename): 保存链接到CSV
  • append_to_json(data, filename): 追加数据到JSON文件

PaginationHandler 类

主要方法:

  • scrape_pages(start_url, max_pages, page_pattern): 自动翻页抓取
  • scrape_numbered_pages(url_pattern, start_page, end_page): 抓取编号页面

注意事项

  1. 遵守法律法规:请确保你的爬虫行为符合目标网站的使用条款和当地法律
  2. 尊重 robots.txt:默认配置会遵守网站的 robots.txt 规则
  3. 控制频率:使用合理的延迟时间,避免对服务器造成压力
  4. 异常处理:程序已包含基本的异常处理,但建议根据具体需求进行调整
  5. 数据使用:请合理使用抓取的数据,尊重原作者的版权

依赖项

  • requests >= 2.31.0
  • beautifulsoup4 >= 4.12.0
  • lxml >= 4.9.0
  • pandas >= 2.0.0

许可证 (License)

本项目采用 MIT 许可证。详见 LICENSE 文件。

贡献 (Contributing)

欢迎提交 Issue 和 Pull Request!

联系方式

如有问题或建议,请通过 GitHub Issues 联系。

About

一个基于Web的简单项目

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages