Python爬取杜赛博客教程内容,应用pdfkit打印pdf文件
听说杜佬的博客更新了,尤其是django教程,本渣渣由于没有钱充值网络,所以一直是断网状态下,本身也是有搜集教程进文件夹吃灰的通病,因此就有了这样一篇渣渣文,应用python爬取杜赛博客教程内容,同时应用pdfkit打印pdf文件,快进本渣渣的收藏夹吃灰吧!
收藏等于学废系列,一直吃灰,一直爽!
话说本渣渣就是自带渣渣属性,学了一年多了,还是渣渣,不像杜佬一年就搞定了django,还出了教程,还有各种输出!
其实前面早已经分享过一篇吃灰文章:Python知乎专栏爬虫,pdfkit专栏文章制作PDF电子书!
不妨自行查看,所以又是一篇吃老本的文章,棺材板盖不住了嘿!
Python模块之pdfkit介绍及用法
1.pdfkit 库安装
pip install pdfkit #wkhtmltopdf 的Python封装包
2.安装wkhtmltopdf.exe文件 注:pdfkit是基于wkhtmltopdf的python封装,所以需要安装wkhtmltopdf.exe。wkhtmltopdf是轻量级软件,非常很容易安装。
下载地址: https://wkhtmltopdf.org/downloads.html
下载wkhtmltopdf
下载完成后,一路next,将 wkhtmltopdf 安装好。
务必要记住安装地址,找到wkhtmltopdf.exe
文件所在的绝对路径,后面要用到。
我这里是默认路径""C:Program Fileswkhtmltopdfbinwkhtmltopdf.exe""
安装wkhtmltopdf
渣渣已经给各位老哥们打包好了!我这里打包的是win7 64位!
链接: https://pan.baidu.com/s/1tQ-IgPjtVjs9OrlHjAKCDA 提取码: tj2j
3.pdfkit用法
pdfkit.from_url('http://www.duoxiqi.cn', 'out.pdf') #从URL生成
pdfkit.from_file('test.html', 'out.pdf') #从文件生成
pdfkit.from_string('Hello!', 'out.pdf') #从字符串生成
配置方法
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://www.duoxiqi.cn', 'out.pdf', options=options)
文档参考:https://pypi.org/project/pdfkit/
回归正题,爬杜佬的博客,代码真规范啊!但是也遇到坑了!!!
获取链接的时候,竟然有重复的链接出现,本来想用set简单的去重,发现去重后顺序错乱,还是老老实实写判断吧!
判断去重
if url not in urls:
urls.append(url)
参考代码:
def get_urls(self):
urls = [self.url, ]
response=requests.get(self.url,headers=self.headers,timeout=8)
html=response.content.decode('utf-8')
req=etree.HTML(html)
hrefs=req.xpath('//div[@class="card-text"]/p/a/@href')
for href in hrefs:
url=f'https://www.dusaiphoto.com{href}'
if url not in urls:
urls.append(url)
print(len(urls))
return urls
获取详情,标题的字符需要替换,不然存储文档会报错!
pattern = r"[/\:*?"<>|]"
h1 = re.sub(pattern, "_", h1) # 替换为下划线
参考代码:
def get_content(self,url,category):
response = requests.get(url, headers=self.headers, timeout=8)
html = response.content.decode('utf-8')
req = etree.HTML(html)
#获取标题
h1=req.xpath('//h1[@class="article-title"]/text()')[0]
title=f'<h1>{h1}</h1>'
pattern = r"[/\:*?"<>|]"
h1 = re.sub(pattern, "_", h1) # 替换为下划线
print(h1)
#获取详情
detail = req.xpath('//div[@id="article_body"]')[0]
content = etree.tostring(detail, encoding='utf-8').decode()
#版权
author=f"来源:杜赛博客-原文链接:{url}"
data = f'{title}n{content}n{author}'
self.dypdf(h1,data,category)
return data
应用pdfkit打印pdf文件
需要注意的是 编码需要注明
同时如果是应用的字符串,需要补全html代码!
pdfkit.from_string('Hello!', 'out.pdf') #从字符串生成
参考代码:
def dypdf(self,h1,data,category):
datas = f'<html><head><meta charset="UTF-8"></head><body>{data}</body></html>'
print("开始打印内容!")
pdfkit.from_string(datas, f'{category}/{h1}.pdf', configuration=confg)
print("打印保存成功!")
爬取打印的pdf教程,本渣渣也已经打包好了给各位大佬哥!!
关注本渣渣微信公众号,回复 杜佬django教程 自取!
如果想要获取该pdf电子书
可关注我微信公众号 :二爷记
回复 杜佬django教程 获取!
感谢杜佬用爱发电,本渣渣仅仅只是一个搬运工!!!
完整源码获取可关注微信公众号,后台 回复 感谢杜佬 自取!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法