基于Python实现网页文章转PDF文档

 更新时间:2022年05月25日 16:02:18   作者:嗨学编程  
有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这也太麻烦了。本文将用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):
    """
    替换标题中的特殊字符
    :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://****/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)
    """
    url里面的****替换为blog.csdn.net即可
    把 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网页文章转PDF内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基于SMTP协议实现发送邮件功能详解

    Python基于SMTP协议实现发送邮件功能详解

    这篇文章主要介绍了Python基于SMTP协议实现发送邮件功能,结合实例形式分析了Python使用SMTP协议实现邮件发送的相关操作技巧,并总结分析了Python发送纯文本邮件、邮件附件、图片邮件等相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • python使用 __init__初始化操作简单示例

    python使用 __init__初始化操作简单示例

    这篇文章主要介绍了python使用 __init__初始化操作,结合实例形式分析了Python面向对象程序设计中使用__init__进行初始化操作相关技巧与注意事项,需要的朋友可以参考下
    2019-09-09
  • Django的models模型的具体使用

    Django的models模型的具体使用

    这篇文章主要介绍了Django的models模型的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python弹球小游戏的项目代码

    Python弹球小游戏的项目代码

    本文主要介绍了Python弹球小游戏的项目代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Python实现队列的方法示例小结【数组,链表】

    Python实现队列的方法示例小结【数组,链表】

    这篇文章主要介绍了Python实现队列的方法,结合实例形式分析了Python基于数组和链表实现队列的相关操作技巧与相关注意事项,需要的朋友可以参考下
    2020-02-02
  • pyspark操作MongoDB的方法步骤

    pyspark操作MongoDB的方法步骤

    这篇文章主要介绍了pyspark操作MongoDB的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 教你如何使用Python开发一个钉钉群应答机器人

    教你如何使用Python开发一个钉钉群应答机器人

    在聊天工具大肆侵入我们生活各个方面的今天,各种消息无时无刻不在侵扰我们的每一寸时间,这种情况下,一个聊天的机器人就很有必要了.今天,我们来学习一下使用 Python 开发一个钉钉的应答机器人,助你「人生苦短,少回消息」,需要的朋友可以参考下
    2021-06-06
  • Python3的正则表达式详解

    Python3的正则表达式详解

    这篇文章主要为大家详细介绍了Python3正则表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • python关于变量名的基础知识点

    python关于变量名的基础知识点

    在本篇文章里小编给大家整理的是关于python关于变量名的基础知识点,需要的朋友们可以参考下。
    2020-03-03
  • 详解Python中字符串前“b”,“r”,“u”,“f”的作用

    详解Python中字符串前“b”,“r”,“u”,“f”的作用

    这篇文章主要介绍了Python中字符串前“b”,“r”,“u”,“f”的作用,感兴趣的朋友跟随小编一起看看吧
    2019-12-12

最新评论