基于Python实现网页文章转PDF文档
作者:嗨学编程 发布时间:2022-08-23 08:50:17
标签: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)
兄弟们快去试试吧!
来源:https://blog.csdn.net/fei347795790/article/details/124965768
0
投稿
猜你喜欢
- 通过一个简单的实例,来让大家了解一下golang flag包的一个简单的用法package mainimport ( "
- # 封装# Python并没有真正的私有化支持,但可用下划线得到伪私有 访问私有变量:实例._类名__变量名 访问私有方法:实例._类名__
- 以上述图片举例,要求 相对 的顺时针夹角。注意:这里使用图像坐标系1 定义求顺时针角度的函数 import numpy as npdef
- 用Python写个注册登录功能,供大家参考,具体内容如下本文是用Python写一个注册登录功能,难度不大,很适合练手主要就是用列表和字典,以
- 如下所示:函数功能abs(x)返回一个数的绝对值。 参数可以是一个整数或浮点数。 如果参数是一个复数,则返回它的模。all(iterable
- 一、概述本章主要写当慢查询文件很大的时候怎样在线生成一个新的慢查询文件。测试环境:mysql 5.6.21二、步骤配置慢查询默认的my.cn
- 【摘 要】 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多
- 编程需求:使用python+opencv对图像进行处理,把两张图放在一起显示方法:使用numpy模块中的水平堆叠或竖直堆叠完成所有图像的堆叠
- 我想大多数的人在编写ASP程序的时候,都碰到过类似的错误信息: Error Num
- jupyter notebook 自定义python解释器jupyter notebook 和虚拟环境的好处就不多废话了jupyter no
- isalnum()方法检查判断字符串是否包含字母数字字符。语法以下是isalnum()方法的语法:str.isa1num()参数
- MySQL当url连接不指定/数据库名可以访问到mysql服务器上有权限的任何库,但是所有sql需要加上库名前缀.pom<depend
- Git简单介绍Git是一个分布式版本控制软件,最初由Linus Torvalds创作,于2005年以GPL发布。最初目的是为更好地管理Lin
- 本文记录了笔者用 Python 爬取淘宝某商品的全过程,并对商品数据进行了挖掘与分析,最终得出结论。项目内容本案例选择>> 商品
- 前话最近跟着廖雪峰的教程学到 模块 这一节。关于如何自定义一个模块,如果大家不懂的话先来看看基本的介绍:模块在计算机程序的开发过程中,随着程
- 一、 笛卡尔积笛卡尔积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X ×
- python使用folium 库生成地图网页的具体代码,供大家参考,具体内容如下folium 官网import foliumimport p
- 首先,这次讲解的tansforms功能,通俗地讲,类似于在计算机视觉流程里的图像预处理部分的数据增强。transforms的原理:说明:图片
- 最近有一个项目,需要检查某个字符型字段的值是否为数字,由于数据行是海量,所以需要通过SQL语句来筛查,这里拿来做个备忘。用到的函数为IsNu
- 控制结构就是for,while,if-else,if-elif,while…else,在web.py中其实和我们以前学过的一样,操作基本是相