Python爬取喜欢的博客,并将博客转成PDF


点击上方“俊林”,马上关注,每天早上8:50准时推送

真爱,请置顶或星标

本文转载自公号Python攻城狮,作者:Python攻城狮


开篇之前,先说明一下,此次整理的博客主要为天善智能博客社区。

天善智能,专注商业智能和数据库性能优化,如果你有自己的问题苦苦找不到解决的办法,可以在天善问答社区寻求帮助。

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

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

640?wx_fmt=png

1.采集数据

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

640?wx_fmt=png
import requestsurl = '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)
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,那么只采集一篇怎么能行,这里我们就需要采集所有的文章地址。

640?wx_fmt=png

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


640?wx_fmt=png
import requestsfrom lxml import etreemap_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).contenthtml = 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)

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 wkhtmltopdfpip install pdfkit
pip install pdfkit

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

soup = BeautifulSoup(result, 'html.parser')body = soup.find_all(class_='message-content')'html.parser')
body = soup.find_all(class_='message-content')
 # 将标题加入正文居中center_title = soup.new_tag('center')title_tag = soup.new_tag('h1')title_tag.string = titlecenter_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)
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)
pdfkit.from_file(htmls, user_name + "的文章合辑.pdf", options=options)"的文章合辑.pdf", options=options)
640?wx_fmt=png

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值