前言

前面我们对博客园的文章进行了爬取,结果比较令人满意,可以一下子下载某个博主的所有文章了。但是,我们获取的只有文章中的文本内容,并且是没有排版的,看起来也比较费劲。。。

咋么办的?一个比较好的方法是将文章的正文内容转化成pdf,就不要考虑排版的事情了,看起来比较美观,也不会丢失一些关键信息。

python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。

1、下载wkhtmltopdf安装包,并且安装到电脑上,在系统Path变量中添加wkhtmltopdf的bin路径,以便于pdfkit的调用。

下载地址:https://wkhtmltopdf.org/downloads.html

请根据自己的系统版本,选择合适的安装包。如果没有装C语言库,建议选择Windows下的第二种。

【插入图片 pdf1】

2、在pycharm中安装pdfkit库,过程就不介绍啦,前面讲过类似的内容。

3、在pycharm中安装whtmltopdf库。

这个和第一步中的安装包是两个东西,请区别开来。

用法简介

对于简单的任务来说,代码很easy,比如:

import pdfkit

pdfkit.from_url('http://baidu.com','out.pdf')

pdfkit.from_file('test.html','out.pdf')

pdfkit.from_string('Hello!','out.pdf')

pdfkit包含的方法很少,主要用的就是这三个,我们简单看一下每个函数的API:

from_ulr()

def from_url(url, output_path, options=None, toc=None, cover=None,

configuration=None, cover_first=False):

"""

Convert file of files from URLs to PDF document

:param url: url可以是某一个url也可以是url的列表,

:param output_path: 输出pdf的路径,如果设置为False意味着返回一个string

Returns: True on success

"""

r = PDFKit(url, 'url', options=options, toc=toc, cover=cover,

configuration=configuration, cover_first=cover_first)

return r.to_pdf(output_path)

from_file()

def from_file(input, output_path, options=None, toc=None, cover=None, css=None,

configuration=None, cover_first=False):

"""

Convert HTML file or files to PDF document

:param input: 输入的内容可以是一个html文件,或者一个路径的list,或者一个类文件对象

:param output_path: 输出pdf的路径,如果设置为False意味着返回一个string

Returns: True on success

"""

r = PDFKit(input, 'file', options=options, toc=toc, cover=cover, css=css,

configuration=configuration, cover_first=cover_first)

return r.to_pdf(output_path)

from_string()

def from_string(input, output_path, options=None, toc=None, cover=None, css=None,

configuration=None, cover_first=False):

#类似的,这里就不介绍了

r = PDFKit(input, 'string', options=options, toc=toc, cover=cover, css=css,

configuration=configuration, cover_first=cover_first)

return r.to_pdf(output_path)

举几个栗子

我们可以传入列表:

pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')

pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')

我们可以将一个打开的文件对象传进去:

with open('file.html') as f:

pdfkit.from_file(f, 'out.pdf')

如果我们想继续操作pdf,可以将其读取成一个变量,其实就是一个string变量。

# Use False instead of output path to save pdf to a variable

pdf = pdfkit.from_url('http://google.com', False)

指定pdf的格式

我们可以指定各种选项,就是上面三个方法中的options。

具体的设置可以参考https://wkhtmltopdf.org/usage/wkhtmltopdf.txt 里面的内容。

我们这里只举个栗子:

options = {

'page-size': 'Letter',

'margin-top': '0.75in',

'margin-right': '0.75in',

'margin-bottom': '0.75in',

'margin-left': '0.75in',

'encoding': "UTF-8",

'custom-header' : [

('Accept-Encoding', 'gzip')

]

'cookie': [

('cookie-name1', 'cookie-value1'),

('cookie-name2', 'cookie-value2'),

],

'no-outline': None

}

pdfkit.from_url('http://google.com', 'out.pdf', options=options)

默认的,pdfkit会show出所有的output,如果你不想使用,可以设置为quite:

options = {

'quiet': ''

}

pdfkit.from_url('google.com', 'out.pdf', options=options)

我们还可以传入任何html标签,比如:

body = """

Hello World!

"""

pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape

改进

有了上面的知识之后,我们大可以尝试一下,如果将之前的save_file方法做一些改变,就能够实现我们下载PDF的目标啦。

我们将方法名改成save_to_pdf,并且在get_body方法中直接返回str(div),而不是div.text。代码如下:

def save_to_pdf(url):

'''

根据url,将文章保存到本地

:param url:

:return:

'''

title=get_title(url)

body=get_Body(url)

filename=author+'-'+title+'.pdf'

if '/' in filename:

filename=filename.replace('/','+')

if '\\' in filename:

filename=filename.replace('\\','+')

print(filename)

options = {

'page-size': 'Letter',

'encoding': "UTF-8",

'custom-header': [

('Accept-Encoding', 'gzip')

]

}

#本来直接调用pdfkid的from方法就可以了,但是由于我们的wkhtmltopdf安装包有点问题,一直没法搜到,所以只能用本办法,直接配置了wk的地址

#尴尬了,主要是一直没法下载到最新的wk,只能在网上down了旧版本的。有谁能下到的话发我一份。。。

config=pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')

pdfkit.from_string(body,filename,options=options,configuration=config)

print('打印成功!')

【插入图片,pdf2】

哈哈,成功了,下载了这么多pdf,回头慢慢看就可以了。

python爬虫网页pdf_爬虫实战【3】Python-如何将html转化为pdf(PdfKit)相关推荐

  1. python 数据挖掘 网页_使用Selenium和Python进行网页搜刮!

    使用Selenium和Python进行网页搜刮! 机器学习助长了当今的技术奇迹,例如无人驾驶汽车,太空飞行,图像和语音识别.但是,一位数据科学专业人员将需要大量数据来构建针对此类业务问题的健壮且可靠的 ...

  2. python 做网页_听过最近Python过气了?

    Python过气了? 怎么可能?! 会Python的人,工作都不会太差.作为职场"新晋网红",Python在各行各业中扮演着越来越重要的角色. 曾经Excel在金融.数据岗位&qu ...

  3. python 播放本地音乐_实战项目—python实现本地音乐播放器

    随着网络的发展,我们已经很少将音乐下载到本地,而是直接在线听歌,方便而又直接.也许你用的音乐播放器是这个 也许是这个 这都不是重点,今天我们要用python自己打造一款音乐播放器. 具体思路 使用py ...

  4. python下载网页里面所有的图片-Python 爬虫零基础教程(2):下载一组网页上的图片...

    效果图: 代码: # -*- coding: utf-8 -*- # Filename: download_pics.py # 下载一组图片 # 这组图片的 url 末位为 001 至 008 imp ...

  5. python 简单网页_Python爬虫 (一):爬取一个简单的静态网页

    版本:python3.7 平台:windows10 工具 :pycharm 断断续续学习了py3爬虫2周左右的时间,发现自己学习的过于零散化,所以想通过这个专栏系统的整理下自己所学过的知识.如有错误, ...

  6. 网络工程师的python之路pdf_网络工程师的Python之路:网络运维自动化实战

    内容简介 本书赞誉 关于作者 前言 致谢 第1章 Python的安装和使用 1.1 安装Python 1.1.1 在Windows下安装Python 3.8.2 1.1.2 在Linux下安装Pyth ...

  7. python爬网页文字_怎么用python爬取网页文字?

    用Python进行爬取网页文字的代码:#!/usr/bin/python # -*- coding: UTF-8 -*- import requests import re # 下载一个网页 url  ...

  8. 《Python数据分析与挖掘》实战项目 - Python程序设计(期末大作业、课程设计、毕业设计)2012-2021近十年考研英语一真题词汇词频统计与可视化(附代码)

    <Python数据分析与挖掘> - 2012-2021近十年考研英语一真题词汇词频统计与可视化 声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog ...

  9. python打开网页并输入数据_使用Python登陆网站读取表格数据

    近期有经常使用的数据,需要登陆到某个网站,将其中的表格数据读取出来,为了提高效率节省工作时间,决定写一个程序,使用Python自动登陆到该网站然后将某日(参数)的数据读取并存放于excel表格中. 1 ...

最新文章

  1. 【发现】Warcraft III v1.22 不用正版CDKey上Battle.net 续篇
  2. javascript 解密_Javascript中的AES加密和Java中的解密
  3. Poj_1325 Machine Schedule -最大匹配性质题目
  4. JSP的JavaBean前的知识点
  5. 通过还款计划表监控还款异常
  6. edittext在哪可以获取有效值_java-从EditText获取文本字符串?
  7. UI动画的一些制作过程
  8. 如何在Visual Studio Code中使用Live Share
  9. 解决谷歌浏览器最新版本CORS跨域问题
  10. Win10安装CUDA报错NVIDIA安装程序失败
  11. php框架laravel win10,composer 安装Laravel (win10)
  12. 麦克斯韦方程组在电力传动领域的应用(1)
  13. idea主菜单不见了解决方法
  14. intptr_t详解
  15. php编辑器怎么修改字体,vscode怎么改变字体
  16. js的三大家族(offset/scroll/client)和一个事件对象(event)///正则
  17. NAT-DDNS内网穿透技术,解决动态域名解析难题
  18. 用友NC二次开发问题汇总【转】
  19. 全网最全资源需要的看过来---分享是一种情怀
  20. 2022年最值得学习的5款开源Java框架 小白教程

热门文章

  1. 初级程序员为避免淘汰该怎么办?
  2. Jmeter设置代理,抓包之app请求
  3. 深入浅出C/C++中的正则表达式库(二)——Boost.Regex
  4. Tomcat源代码解析系列
  5. Theano 中文文档 0.9 - 7.1.2 NumPy新手
  6. 应用SELinux中的目标策略限制进程运行
  7. 信息学奥赛一本通(1110:查找特定的值)
  8. Small Multiple(AtCoder-3621)
  9. 放苹果(信息学奥赛一本通-T1192)
  10. 字符串匹配问题(信息学奥赛一本通-T1355)