作为一名技术爱好者,经常会看到一些优质的技术博客,想保存下来慢慢学习,但在线阅读总觉得不方便,于是用Python写了一个爬虫脚本,能够自动爬取指定博客的文章,并将其保存为PDF格式,分享给大家。
一、所需工具与环境准备
本次实战使用的库有:requests(发送HTTP请求)、BeautifulSoup(解析HTML页面)、pdfkit(将HTML转换为PDF)。首先需要安装这些库,在命令行中执行以下安装命令:
pip install requests beautifulsoup4 pdfkit
注意,pdfkit需要依赖wkhtmltopdf,需要先在官网下载并安装,然后配置环境变量,否则无法正常生成PDF文件。
二、核心逻辑步骤
脚本的核心逻辑分为三步:
- 发送请求获取博客列表页面,解析出每篇文章的链接;
- 遍历文章链接,获取每篇文章的标题、正文内容,过滤掉广告、导航等无关元素;
- 将正文内容转换为HTML字符串,使用pdfkit生成PDF文件,按文章标题命名并保存到本地文件夹。
三、关键代码片段及解释
1. 解析文章列表,获取所有文章链接:
import requests
from bs4 import BeautifulSoup
def get_article_links(list_url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
response = requests.get(list_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 根据博客页面结构调整选择器,这里以某技术博客为例
article_links = [a['href'] for a in soup.select('.article-list a[href]')]
return article_links
2. 获取文章内容并生成PDF文件:
import pdfkit
def save_article_as_pdf(article_url, save_path):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36'}
response = requests.get(article_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取文章标题
title = soup.select('.article-title')[0].get_text().strip()
# 获取文章正文,过滤无关元素
content = soup.select('.article-content')[0]
# 转换为HTML字符串
html_content = f'<html><head><meta charset="utf-8"><title>{title}</title></head><body>{content}</body></html>'
# 生成PDF
pdfkit.from_string(html_content, f'{save_path}/{title}.pdf', options={'encoding': 'UTF-8'})
print(f'{title} 保存成功')
四、使用注意事项
使用时,只需修改list_url(博客列表页链接)和save_path(PDF保存路径),运行脚本即可自动爬取。同时还有几点重要提醒:
- 爬虫要遵守网站的robots协议,不要频繁请求,建议在代码中添加time.sleep(1)控制请求频率,避免被封IP;
- 不同博客的页面结构不同,需要根据实际情况调整BeautifulSoup的选择器(如.article-list、.article-title);
- 如果出现中文乱码,确保HTML字符串中指定了utf-8编码,且pdfkit生成时配置了encoding选项。
这个脚本虽然简单,但非常实用,平时可以用来爬取技术文档、教程等内容,方便离线阅读和整理。如果需要爬取多个页面或批量下载,还可以扩展脚本,添加多线程或循环遍历功能。
正文完