好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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 Files\wkhtmltopdf\bin\wkhtmltopdf.exe""

安装wkhtmltopdf

渣渣已经给各位老哥们打包好了!我这里打包的是win7 64位!

链接: https://pan.baidu测试数据/s/1tQ-IgPjtVjs9OrlHjAKCDA 提取码: tj2j

3.pdfkit用法

 pdfkit.from_url('http://HdhCmsTestduoxiqi.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://HdhCmsTestduoxiqi.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://HdhCmsTestdusaiphoto测试数据{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教程 ?获取!

感谢杜佬用爱发电,本渣渣仅仅只是一个搬运工!!!

再墙裂推荐一下 杜佬的博客 地址:?

https://HdhCmsTestdusaiphoto测试数据/

完整源码获取可关注微信公众号,后台 回复 感谢杜佬 自取!

查看更多关于Python爬取杜赛博客教程内容,应用pdfkit打印pdf文件的详细内容...

  阅读:26次