专栏首页Python攻城狮Python可以做哪些好玩的事之将喜欢的博客整理成pdf1.采集数据2.将网页转换为pdf

Python可以做哪些好玩的事之将喜欢的博客整理成pdf1.采集数据2.将网页转换为pdf

开篇之前,想打一波硬广(没(fen)广(si)(fu)(li)(ง •̀_•́)ง)。简书爸爸会不会打我? 天善智能,专注商业智能和数据库性能优化,如果你有自己的问题苦苦找不到解决的办法,可以在天善问答社区寻求帮助。

和简书一样,它有着很多优秀的技术类的文章,和简书不同的是它有着自己的问答社区,在天善问答社区,可以发表自己的问题寻(yao)(qing)各位大佬的帮助。

最近在学习ETL,于是在天善关键词搜索,光看目录就已经觉得很牛逼了~ <数据仓库设计、ETL设计框架>等等。作为一个爱学习的人,看到这么多有内涵的博客,当然想学习新技能(flag+1),但是我更习惯在手机上浏览,如果我想在手机上看,网页端显然是不太方便的,所以果断转换成pdf存一份(说干就干)

1.采集数据

有一段时间没有在博客中分析了,今天就不(luo)(li)(luo)(suo)再头来一遍。

  • chrome浏览器右键检查,在弹出窗口中选择network,这时点击我们想要查看的博客链接,天善社区的博客列表显然是972这个,有的时候链接不一定是在XHR分类下,具体网页我们要具体分析。
  • 点击972,查看RequestURL,复制这个链接打开,发现获得的内容和我们当前点开的链接一样,此时我们就大工告成了一半。
import requests
url = 'https://ask.hellobi.com/blog/biwork/972'
my_headers = {
    "Accept-Language":"zh-CN,zh;q=0.9",
    "Host":"ask.hellobi.com",
    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36"
}
r = requests.get(url=url, headers=my_headers)
print(r.content)

写到这以为完成了一半,那就大错特错了,既然我们想将整个目录都转换为pdf,那么只采集一篇怎么能行,这里我们就需要采集所有的文章地址。

天善博客社区提供博客地图,这对我们的提取所有的链接提供了便利,所以下一步我们就来采集这些链接。

  • 代码
import requests
from lxml import etree

map_url = 'https://ask.hellobi.com/blog/biwork/sitemap/'
map_headers = {
    "Host": "ask.hellobi.com",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
}
rel = requests.get(url=map_url, headers=map_headers).content
html = etree.HTML(rel)
datas = html.xpath('//div[@class="col-md-12"]')
list_url = []
for data in datas[0]:
    blog_urls = data.xpath('./li/a/@href')
    print(blog_urls)

2.将网页转换为pdf

既然要转换pdf,我们就需要使用一个神器。wkhtmltopdf 生成PDF时会自动根据你在HTML页面中的标签生成树形目录结构,同时也可以在通过相应的函数设置将网页中的指定部分转换为pdf。

  • 终端输入命令
pip install wkhtmltopdf
pip install pdfkit

匹配查看网页html信息,找出作者,标题,作者

soup = BeautifulSoup(result, 'html.parser')
body = soup.find_all(class_='message-content')
  • 写入html文件
 # 将标题加入正文居中
center_title = soup.new_tag('center')
title_tag = soup.new_tag('h1')
title_tag.string = title
center_title.insert(1, title_tag)
html = str(body)
print(html)
html = html_template.format(content=html)
html = html.encode("utf-8")
f_name = ".".join([str(index), "html"])
with open(f_name, 'wb') as f:
     f.write(html)
     htmls.append(f_name)
  • 将html文件合并为pdf
pdfkit.from_file(htmls, user_name + "的文章合辑.pdf", options=options)
  • 执行完毕 pdf效果

大功告成,我们可以愉快的把想看的博客转换成pdf了。 完整代码已上传Github.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django实战(一)- 搭建简单的博客系统

    意气相许的许
  • Django实战(二)- 创建一个课程选择系统1.需求2.代码操作

    意气相许的许
  • Django教程(四)- Django模板及进阶

    需求:编写注册提交,“密码”与“确认密码”不一致,显示密码不一样。成功后在另一个页面显示 代码操作:

    意气相许的许
  • Python基础学习_10_网页爬虫实战爬取百度百科词条(源码下载)

    下面使用Python开发一个网页爬虫,爬取百度百科词条信息,整个程序涉及到url管理器,html下载器,html解析器,html显示以及调度程序:

    码农帮派
  • webpack4.0各个击破(1)—— html部分

    对于浏览器而言,html文件是用户访问的入口点,也是所有资源的挂载点,所有资源都是通过html中的标记来进行引用的。而在webpack的构建世界里,html只是...

    大史不说话
  • Python实战异步爬虫(协程)+分布式爬虫(多进程)

    在讲解之前,我们先来通过一幅图看清多进程和协程的爬虫之间的原理及其区别。(图片来源于网络)

    SL_World
  • vscode中的vue文件中emmet进行tab键不起作用的解决办法

    飞奔去旅行
  • webpack打包原理入门探究(四)插件探究(下)

    公众号---志学Python
  • Flask学习笔记之模板(三)

    我们都知道html模板中,很多内容都是有重复的,譬如前面的head和后面的footer部分,这里的部分都是重复的,我们可以通过今天的学习的技术,减少代码的使用量...

    罗罗攀
  • 网站搭建-django-学习成绩管理-03-网页测试

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia

扫码关注云+社区

领取腾讯云代金券