用python将网上的文章转存为PDF文档,保存电脑上慢慢看

我们有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这样一次两次还好,数量多了,比较麻烦不说,还可能不好找~

用python将网上的文章转存为PDF文档,保存电脑上慢慢看

这个时候,Python的作用就来了,直接抓下来导出为PDF,直接把整个网站的内容都导下来都行~

在这里插入图片描述

话不多说,我们直接上代码!

import requests
import parsel
import pdfkit
import os
import re


html_str = """
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
{article}
</body>
</html>
"""


def change_title(title):
    """
    python学习交流群:279199867
    替换标题中的特殊字符
    :param title: 传入文章标题
    :return: 返回一个替换掉特殊字符的标题
    """
    """
    使用re.compile()将正则表达式的字符串形式编译为一个对象,通过该对象提供的一些列方法对文本
    进行匹配查找
    re.sub() 第一个参数对应的正则表达式,第二个参数为要替换成的字符串, 第三个参数为源字符串
    """
    pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]")  # '/ \ : * ? " < > |'
    new_title = re.sub(pattern, "_", title)  # 替换为下划线
    return new_title


for page in range(1, 11):
    """
    发送请求的url地址,唯一资源定位符
    headers: 请求头 把python伪装成浏览器对服务器发送请求, 然后服务器会给我们返回一个响应数据
        请求头所加的参数都是可以在开发者工具中的headers里面的request headers中找到的
        比如 user-agent:代表着浏览器的信息
            cookies:用户的信息 常用于检测是否有登陆账号
            host:域名
            referer:常说的防盗链,告诉服务器是从哪个网页跳转过来的
    请求方式:可以通过开发者工具中headers里面的数据看到是什么样的请求方式
        get请求: 是可以直接从服务器上面获取数据
        post请求:需要向服务器发送一个数据 比如说(搜索/登陆)
    response:响应对象
    状态码: 200表示请求成功 300:重定向 跳转 400:通常是url网址不对 500 一般是服务器问题
    获取网页文本数据 response.text 获取网页json字典数据 response.json() 获取网页二进制数据 response.content
    """
    url = 'https://blog.csdn.net/qdPython/article/list/{page}'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
    }
    response = requests.get(url=url, headers=headers)
    """
    把 html 字符串数据转换成一个 Selector 对象
    Selector 就具有一系列数据解析的方法  css/xpath/re
    类选择器 都是使用圆点.开头
    ID选择器 是使用#开头
    属性选择器:
        ::text获取标签里面的文本数据
        ::attr(xxx) 获取标签内某一个属性的数据
        get() 从 Selector 对象中提取第一个数据, 直接返回字符串数据给我们
        getall() 从 Selector 对象中提取提取所有数据, 返回一个列表
    """
    selector = parsel.Selector(response.text)
    href = selector.css('.article-list div.article-item-box a::attr(href)').getall()
    for link in href:
        response_1 = requests.get(url=link, headers=headers)
        selector_1 = parsel.Selector(response_1.text)
        title = selector_1.css('#articleContentId::text').get()
        content = selector_1.css('#content_views').get()
        new_title = change_title(title)
        # 创建文件保存地址以及保存文件的名字 和格式
        pdf_path = 'pdf\\' + new_title + '.pdf'
        html_path = 'pdf\\' + new_title + '.html'
        # str.format() 字符串格式化方法
        html = html_str.format(article=content)
        """
        with open   打开文件时, 当文件对象引用完毕之后会自动关闭文件
        html_path:文件保存路径以及名字格式 
        mode:保存方式 w 写入 如果你不写mode默认是r 读
        encoding: 编码
        as f 重命名 可以自定义
        f = open()
        f.writer()
        f.close()
        """
        with open(html_path, mode='w', encoding='utf-8') as f:
            f.write(html)
            print('正在保存:', title)
        # exe 文件存放的路径
        config = pdfkit.configuration(wkhtmltopdf='C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe')
        # 把 html 通过 pdfkit 变成 pdf 文件
        pdfkit.from_file(html_path, pdf_path, configuration=config)
        os.remove(html_path)

 

兄弟们快去试试吧!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用python将网上的文章转存为PDF文档,保存电脑上慢慢看 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Python批量爬取大众点评数据

    众所周知,某点评是一直有JS加密的,所以关于它的外包一直都很贵,有些公司甚至用来面试,可见他的难度。 但是吧,最近他好像没有加密了,这~ 不值钱了啊! 那当时就忍不住了,就得用Python开始整活了!     话不多说,让我们上代码! 全部代码 今天就没那么多步骤了,直接上代码! import requests import parsel url = ‘ht…

    2023年4月2日
    00
  • 当我把用Python做的课堂点名系统献给各科老师后,再也没挂过科

    刚上大学的表弟问我,大学准备好好玩玩,问我有没有什么不挂科的秘诀。 哎,这可就问对人了,要想不挂科,先把老师贿赂好,当然,咱们说的贿赂不是送钱啥的,这不是侮辱老师吗? 于是我连夜给表弟写了一个课堂点名系统,让他给每个任课老师都送一遍,方便老师就是方便自己,嘿嘿~ 准备工作 首先我们需要准备好点名的姓名文件,使用的时候导入进去就可以开始点名了。 新建一个文本文…

    Python开发 2023年4月2日
    00
  • 这个Python读取文件的方法,堪称天花板级别…

    序言 哈喽兄弟们,今天咱们来了解一下 fileinput 。 说到fileinput,可能90%的码农表示没用过,甚至没有听说过。 这不奇怪,因为在python界,既然open可以走天下,何必要fileinput呢? 但是,今天我还是要介绍fileinput这个方法,因为太奈斯了。 不止是香。是真香! 接下来,就跟着我,一起fileinput,对,就是这个f…

    Python开发 2023年4月2日
    00
  • 利用Python编写密码检测器,输出详细信息~

    兄弟们,今天来实现一下用Python编写密码检测器,并输出详细信息! 本次涉及知识点 文件读写 基础语法 字符串处理 循环遍历   代码展示 # 导入系统包 import platform # 我给大家准备了一些资料,包括2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Pyt…

    Python开发 2023年4月2日
    00
  • 用Python自动实现图表可视化操作,提高工作效率,又能有更多的时间摸鱼了~

    在数据分析过程中,一般提取数据库里面的数据时候,拿着表格数据反复思索,希望能够根据自己所想立马生成一张数据可视化的图表来更直观的呈现数据。 但想要进行数据可视化的时候,往往需要调用很多的库与函数,还需要数据转换以及大量的代码处理编写。这都是十分繁琐的工作,确实只为了数据可视化我们不需要实现数据可视化的工程编程,这都是数据分析师以及拥有专业的报表工具来做的事情…

    Python开发 2023年4月2日
    00
  • 2022 IEEE 编程语言榜单发布!Python 又双叒叕霸榜了,学 SQL 工作更吃香!

    哈喽兄弟们! 近年来,Python 宛如一匹黑马,一骑绝尘,横扫 TIOBE、Stack Overflow 等榜单,如今在 IEEE Spectrum 发布的第九届年度顶级编程语言榜单中,Python 依然是 C、C++、C#、Java 等老牌语言无法比拟的。 关于编程语言的优劣,众说纷纭。不过,在今年这份报告中,我们也发现了一个让人出乎意料的结果,即根据就…

    Python开发 2023年4月2日
    00
  • 用Python做一个中秋抢购月饼的脚本

    序言 每逢佳节倍思亲,想买个东西给家里,结果发现手速不够,网速不够快,没有时间下单等等各种原因导致最后想买的东西售罄了… 甚至跟你一起抢购的可能是脚本,太真实了! 今天就给大家分享一个python版抢购月饼的脚本,我们要用魔法打败魔法!话不多说,直接开搞! 准备工作 今天要用的是一个测试工具的库:Selenium Selenium是一个用于测试网站的自动化测…

    Python开发 2023年4月2日
    00
  • Python将多个文件多列进行关联

    兄弟们,温故而知新,可以为师矣。 就是说,我们所学过的东西,要去多复习,这样才能总结出属于自己的理解,这样就可以做老师了。 但是我以为的我以为,后面可以改成,将自己所学及所领会的教给别人,这样才能更加记忆深刻。 今日内容:Python将多个文件多列进行关联 知识点 文件读写 基础语法 异常处理 循环语句 字符串处理 # 我还给大家准备了这些资料:Python…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部