继续改进上一个项目,上次我们爬取了所有文章,但是保存为TXT文件,查看不方便,而且还无法保存文章中的代码和图片。

所以这次保存为PDF文件,方便查看。

需要的工具:

1、wkhtmltopdf安装包,下载并安装到电脑上,可使用  pip安装  ,注意环境变量的配置。具体参见下面的资料。

2、pdfkit文件(whl文件),下载并安装到pycharm上。

注意安装 whl 文件时:最好吧把 保存 whl文件的文件夹的路径  D:\learning python\Scripts  添加到环境变量里面,然后在此文件夹下打开cmd,直接 pip install XXX.whl  即可。

调用顺序:程序代码会使用pdfkit,pdfkit会调用wkhtmltopdf,而wkhtmltopdf会调用windows中的wkhtmltopdf.exe来转化html为pdf。

1、在我们原理项目的基础上,修改 get_body 方法,直接返回str(div),而不是div.text。

def get_body(url):
"""
获取url下文章的正文内容
:param url:
:return:
"""
html_page = get_html(url)
soup = BeautifulSoup(html_page,'html.parser') #HTML文档解析器
div = soup.find(id = "cnblogs_post_body")
return str(div)

2、然后就是主要的下载方法了:

和之前一样,先创建一个文件夹,然后吧PDF文件下载到刚刚创建的文件夹下面。

def save_single_file_to_PDF(url):
"""
首先在py文件同目录下创建一个以博主名字为名的文件,用来存放爬取的所有文章
将文章正文保存在txt文件中,名字为文章标题
有些文章的标题可能不适合直接作为txt文件名,我们可以忽略这些文章
:param url:
:return:
"""
global article_count #使用全局变量,需要在函数中进行标识
title = get_title(url)
body = get_body(url) #获取当前目录文件,截取目录后,并自动创建文件
FILE_PATH = os.getcwd()[:-0]+author
if not os.path.exists(FILE_PATH):
os.makedirs(FILE_PATH) options = {
'page-size':'Letter',
'encoding':"UTF-8",
'custom-header':[('Accept-Encoding','gzip')]
} try:
filename = title + '.pdf' # 由于wkhtmltopdf软件的版本问题,只能手动设置软件目录,不然无法调用该软件。
config = pdfkit.configuration(wkhtmltopdf=r"D:\learning python\wkhtmltopdf\bin\wkhtmltopdf.exe")
#输出PDF文件
pdfkit.from_string(body, 'D:\learning python\coding_python3.6\cnblog\\Andrew\\'+filename, options=options, configuration=config) article_count += 1 # 计数变量加1,统计总的下载文件数
print(filename + " file have saved...") #提示文章下载完毕 except:
pass

但是需要注意的是:如果以上步骤有缺失,可能碰到的问题是:

1.关于no such file or directory:b'' 这种错误在python中出现时,意味着有.exe文件需要被调用,

而该.exe文件没有被安装或者在控制面板的环境变量中没有添加该.exe的路径。另外,有时候需要改pdfkit代码为下列两句,才可消除错误:

        # 由于wkhtmltopdf软件的版本问题,只能手动设置软件目录,不然无法调用该软件。
config = pdfkit.configuration(wkhtmltopdf=r"D:\learning python\wkhtmltopdf\bin\wkhtmltopdf.exe")
#输出PDF文件
pdfkit.from_string(body, 'D:\learning python\coding_python3.6\cnblog\\Andrew\\'+filename, options=options, configuration=config)

运行结果:

项目完整代码:我的码云

参考资料:

项目启发:http://www.cnblogs.com/xingzhui/p/7887212.html

pdfkit安装:https://blog.csdn.net/appleyuchi/article/details/70947138

爬取博主的所有文章并保存为PDF文件的更多相关文章

  1. python:爬取博主的所有文章的链接、标题和内容

    以爬取我自己的博客为例:https://www.cnblogs.com/Mr-choa/ 1.获取所有的文章的链接: 博客文章总共占两页,比如打开第一页:https://www.cnblogs.com ...

  2. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  3. 使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  4. 爬取博主所有文章并保存到本地(.txt版)--python3.6

    闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...

  5. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  6. Scrapy爬取伯乐在线的所有文章

    本篇文章将从搭建虚拟环境开始,爬取伯乐在线上的所有文章的数据. 搭建虚拟环境之前需要配置环境变量,该环境变量的变量值为虚拟环境的存放目录 1. 配置环境变量 2.创建虚拟环境 用mkvirtualen ...

  7. 『Scrapy』爬取斗鱼主播头像

    分析目标 爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣...... 目标URL如下, ...

  8. python连续爬取多个网页的图片分别保存到不同的文件夹

      python连续爬取多个网页的图片分别保存到不同的文件夹 作者:vpoet mail:vpoet_sir@163.com #coding:utf-8 import urllib import ur ...

  9. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

随机推荐

  1. BarTender条码检验位类型知识讲解

    检验位类型指定BarTender使用哪一种算法来计算符号的附加检验位.使用“BarTender检验位类型”选项可以从您的符号所支持的检验位类型中选择一种检验位类型.下面,小编就给大家分享设置检验位类型 ...

  2. 【ArcGIS】Web AppBuilder For ArcGIS 配置使用

    一.Portal注册 2.Web AppBuilder配置 输入https://XXXX.YYYY.com.cn:3344/webappbuilder/打开配置界面 填写Portal的Url和AppI ...

  3. 打破基于OpenResty的WEB安全防护(CVE-2018-9230)

    原文首发于安全客,原文链接:https://www.anquanke.com/post/id/103771 0x00 前言 ​ OpenResty® 是一个基于 Nginx 与 Lua 的高性能 We ...

  4. Git 学习笔记--1.Git基础操作

    取得项目的Git仓库 有两种方式取得Git项目仓库.第一种是在现存的目录下,通过导入所有文件来创建新的Git仓库.第二种是从已有的Git仓库克隆出一个新的镜像仓库. 在工作目录中初始化新仓库  要对现 ...

  5. linux 查看硬件信息

      1.查看内存槽数.那个槽位插了内存,大小是多少 dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range ...

  6. 浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...

  7. 关于Kafka幂等producer的讨论

    众所周知,Kafka 0.11.0.0版本正式支持精确一次处理语义(exactly once semantics,下称EOS).Kafka的EOS主要体现在3个方面: 幂等producer:保证发送单 ...

  8. STL——序列式容器

    一.容器概述与分类 1. STL容器即是将运用最广的一些数据结构实现出来.常用的数据结构有array, list, tree, stack, queue, hash table, set, map…… ...

  9. html中属于布尔类型的属性

    1.noshade,用来表示有无阴影,多用于在<hr />标签当中 2.ckecked,用来表示是否默认选中,多用于单选按钮<input type="radio" ...

  10. 关于VC中的附加进程调试

    今天领导要求在服务端添加一个获取会议参数的功能接口,接口写好后要自己测试,但是没有客户端的源码,只有客户端安装程序和客户端与服务端发送信令的底层库KSYSClient.dll,而我修改了客户端需要底层 ...