一个功能完整的Python网页爬虫项目,使用Requests和BeautifulSoup库构建。
- ✅ 使用 Requests 和 BeautifulSoup 抓取网页内容
- ✅ 解析提取关键信息(标题、链接、正文内容、图片等)
- ✅ 支持翻页功能,自动抓取多页数据
- ✅ 支持结构化数据导出(CSV/JSON格式)
- ✅ 完善的异常处理机制
- ✅ 请求延迟控制,避免对服务器造成压力
- ✅ 遵守 robots.txt 协议
- ✅ 支持自定义请求头
- ✅ 支持代理设置
- ✅ 模块化设计,易于扩展
.
├── scraper/ # 爬虫核心模块
│ ├── __init__.py # 包初始化
│ ├── web_scraper.py # 主爬虫类
│ ├── parser.py # 数据解析模块
│ ├── output.py # 文件输出模块
│ └── pagination.py # 翻页处理模块
├── config/ # 配置文件
│ └── config.py # 配置参数
├── data/ # 数据输出目录
├── tests/ # 测试文件
├── main.py # 主程序入口
└── requirements.txt # 项目依赖
git clone https://github.com/xfdb88/redesigned-couscous6.git
cd redesigned-couscous6pip install -r requirements.txtfrom 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()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()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后运行。
主要方法:
fetch(url): 抓取单个URL的HTML内容fetch_multiple(urls): 抓取多个URLcan_fetch(url): 检查是否允许抓取(robots.txt)close(): 关闭会话
主要方法:
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): 提取翻页链接
主要方法:
save_json(data, filename): 保存为JSON格式save_csv(data, filename, fieldnames): 保存为CSV格式save_links_csv(links, filename): 保存链接到CSVappend_to_json(data, filename): 追加数据到JSON文件
主要方法:
scrape_pages(start_url, max_pages, page_pattern): 自动翻页抓取scrape_numbered_pages(url_pattern, start_page, end_page): 抓取编号页面
- 遵守法律法规:请确保你的爬虫行为符合目标网站的使用条款和当地法律
- 尊重 robots.txt:默认配置会遵守网站的 robots.txt 规则
- 控制频率:使用合理的延迟时间,避免对服务器造成压力
- 异常处理:程序已包含基本的异常处理,但建议根据具体需求进行调整
- 数据使用:请合理使用抓取的数据,尊重原作者的版权
- requests >= 2.31.0
- beautifulsoup4 >= 4.12.0
- lxml >= 4.9.0
- pandas >= 2.0.0
本项目采用 MIT 许可证。详见 LICENSE 文件。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,请通过 GitHub Issues 联系。