网站内容抓取(Python,抓取,HTML网页并以PDF文件形式保存的方法)
优采云 发布时间: 2022-01-21 22:01网站内容抓取(Python,抓取,HTML网页并以PDF文件形式保存的方法)
想知道Python实现爬取HTML网页并保存为PDF文件的相关内容吗?在本文中,Limerence将详细讲解Python爬取HTML页面并将其保存为PDF文件的相关知识以及一些代码示例。欢迎阅读指正,我们先重点:Python,抓取,HTML网页,PDF文件,保存,一起学习。
本文中的示例描述了 Python 如何实现爬取 HTML 网页并将其保存为 PDF 文件。分享给大家,供大家参考,如下:
一、前言
今天,我将介绍抓取 HTML 网页并将其保存为 PDF。废话不多说,直接上教程吧。
今天的例子以廖雪峰老师的Python教程网站为例:
二、准备工作
1. PyPDF2的安装和使用(用于合并PDF):
PyPDF2 版本:1.25.1
或
安装:
pip install PyPDF2
使用示例:
from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
input1 = open("hql_1_20.pdf", "rb")
input2 = open("hql_21_40.pdf", "rb")
merger.append(input1)
merger.append(input2)
# Write to an output PDF document
output = open("hql_all.pdf", "wb")
merger.write(output)
2. requests和beautifulsoup是两大爬虫神器,reuqests用于网络请求,beautifulsoup用于操作html数据。有了这两个穿梭机,工作很容易。我们不需要像scrapy这样的爬虫框架。这样的小程序有点像拿刀杀鸡。另外,由于html文件转换为pdf,所以必须有相应的库支持。 wkhtmltopdf是一个非常好用的工具,可以用于多平台html到pdf的转换,而pdfkit是wkhtmltopdf的Python包。首先安装以下依赖项
pip install requests
pip install beautifulsoup4
pip install pdfkit
3.安装 wkhtmltopdf
对于Windows平台,直接下载wkhtmltopdf稳定版进行安装。安装完成后,将程序的执行路径添加到系统环境的$PATH变量中。否则,如果pdfkit找不到wkhtmltopdf,就会出现“No wkhtmltopdf executable found”的错误。 Ubuntu和CentOS可以直接从命令行安装
$ sudo apt-get install wkhtmltopdf # ubuntu
$ sudo yum intsall wkhtmltopdf # centos
三、数据准备
1. 获取每个文章
的url
def get_url_list():
"""
获取所有URL目录列表
:return:
"""
response = requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000")
soup = BeautifulSoup(response.content, "html.parser")
menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1]
urls = []
for li in menu_tag.find_all("li"):
url = "http://www.liaoxuefeng.com" + li.a.get('href')
urls.append(url)
return urls
2. 通过 文章url
用模板保存每个 文章 的 HTML 文件
html模板:
html_template = """
{content}
"""
保存:
<p>
def parse_url_to_html(url, name):
"""
解析URL,返回HTML内容
:param url:解析的url
:param name: 保存的html文件名
:return: html
"""
try:
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
# 正文
body = soup.find_all(class_="x-wiki-content")[0]
# 标题
title = soup.find('h4').get_text()
# 标题加入到正文的最前面,居中显示
center_tag = soup.new_tag("center")
title_tag = soup.new_tag('h1')
title_tag.string = title
center_tag.insert(1, title_tag)
body.insert(1, center_tag)
html = str(body)
# body中的img标签的src相对路径的改成绝对路径
pattern = "(