IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【python爬虫入门应用】爬取CSDN博客内容,并转换为pdf和jpg格式 -> 正文阅读

[开发工具]【python爬虫入门应用】爬取CSDN博客内容,并转换为pdf和jpg格式

目录

前言

一、下载工具包、安装模块

二、写bug

1.引入库模块

2.取博客在页面源代码中的信息

2.1 访问网站,拿到页面源代码。

2.2把页面源代码中的博客内容转成字符串格式?

3.转为pdf和ipg格式

4.其它的获取

5.完整的代码及执行截图?

总结


前言

当我们在CSDN这个优秀的博客上浏览学习内容时,比如在看hq的爬虫博客,可能没办法在一下子看得懂或者突然有事看不完,那么我们就想把它保存下来以后再看,但是每次再看的时候经常要登录网站,非常难受。于是,我就想能不能把想看的CSDN上的博客,诶,爬取下来,私底下再慢慢欣赏。九牛二虎之力之后发现,可以实现。下面呢,就以hq的博客为例,我们把他的博客爬取下来并转成pdf和jpg格式保存。

如果只想要这个程序,直接到最后的百度网盘链接即可。


提示:以下是本篇文章正文内容,下面案例可供参考

一、下载工具包、安装模块

1. 需要下载wkhtmltopdf工具包,地址:https://wkhtmltopdf.org/downloads.html,根据自己的需要,下载相应的版本,例如,我是windows10-64位操作系统,那么我就下载下图中我圈中的部分。

?点击下载好的工具包并安装,可以指定安装路径为C盘以外的盘,安装完成后这个文件夹的bin文件夹下会有这两个exe文件。比如我的安装在D盘,如下图所示。

?至此我们的工具包下载完毕。

2.安装python的imgkit模块、pdfkit模块、requests模块、re模块、lxml模块。非常简单!只需要在pycharm中的终端命令中依次输入以下五个命令,就会自动安装,如果你安装过就没必要重复安装了。(重复安装他会提示你已经有了,就不进行安装了。)安装成功会提示,如下图所示。

pip install imgkit
pip install pdfkit
pip install requests
pip install re
pip install lxml

?可能会像我一样报个warning,没关系,它的意思就是说有更新的版本可以去更新。我们不需要新版本,这个版本稳定。当然你也可以去更新。非常好用。

至此我们就完成了对一个工具包和五个库模块的安装,下面,我们正式开始写bug。

二、写bug

1.引入库模块

import requests            #访问网站并拿到页面源代码    
import pdfkit              #转成pdf
import imgkit              #转成jpg
from lxml import etree     #提取网页主要内容
import re                  #拿到文章标题作为文件的命名

?这个没什么好说的,就是类似于咱们写C或者C++程序,把要用的“头文件”“include”进来。

2.取博客在页面源代码中的信息

2.1 访问网站,拿到页面源代码。

headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'
}
url = input("请输入一个CSDN网址\n")
resp = requests.get(url, headers=headers)

headers是我们所需要的做的一个小小的反爬手段,这个可以右键点击博客空白处,点击“检查”,进“网络”里,再刷新一下网页,随便一个访问里就有这个信息。这个信息就是在告诉对面的服务器大哥,这次的访问不是爬虫发出的,而是这个“user-agent”,即正常用户发出的。

??

url是我们需要爬取博客的网站。

resp是一个requests这个“类”调用自身的“类函数”所返回来的一个“对象”。你可以认为得到的是一个类似于C++语言里面的对象,这个方便我们理解。我们从对象中就可以访问我们想要的内容。比如:resp.text就是这个博客网页的页面源代码。

2.2把页面源代码中的博客内容转成字符串格式?

为什么需要转成字符串格式呢,一开始又是什么格式呢,我们一个一个回答。

因为这两个库模块imgkit、pdfkit支持将string类型的数据转换为相对应的pdf和jpg格式,所以我们得把它转为字符串格式。一开始我们爬取的页面源代码格式是html格式,是一种写前端的语言也是一种文件格式。

HeadHtml='''
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{}
</body>
</html>'''

page_html = etree.HTML(resp.text)
page_content = page_html.xpath("//*[@id='mainBox']/main/div[1]")[0]
page_string = etree.tostring(page_content, encoding='utf-8').decode('utf-8')
page_good = HeadHtml.format(page_string)

?我们先看下面四行。

第一行是利用lxml里面的etree对resp.text创建一个page_html对象的“指针”,该“指针”指向原始页面源代码html。

之后第二行调用xpath函数,xpath解析来获取我们想要的博客页面内容的html。xpath地址可以右键“检查”,通过点击左上角选择整个博客页面,右键相应的源代码选择复制xpath值,来获得参数,这个值就写到括号里面。如下图所示。

?

?第三行就是把博客页面所对应的html内容转为string形式。调用etree的tosrtring函数,可以对html信息转为string形式。参数encoding可以不要,但是外面的decode必须为页面对应的编码格式(因为我们要解码,所以必须要编码格式),这里我们通过源代码可以找到格式为“utf-8”。源代码可以右击页面空白处,选择“查看页面源代码”,在里面就可以看得到。如下图所示。

?

第四行就是把上面“HeadHtml”(格式为string)和现有的博客html(格式为string)合并为完整的html(string格式)。

至此我们对博客的页面源代码处理结束,得到了page_good:博客内容这块对应的html(string格式)。

3.转为pdf和ipg格式

path1 = r'D:\pythonthird\python-pdf-png\wkhtmltopdf\bin\wkhtmltopdf.exe'
path2 = r'D:\pythonthird\python-pdf-png\wkhtmltopdf\bin\wkhtmltoimage.exe'

file_name1 = '{}/{}.pdf'.format(address, title)
config1 = pdfkit.configuration(wkhtmltopdf=path1)
pdfkit.from_string(page_good, file_name1, configuration=config1)

file_name2 = '{}/{}.jpg'.format(address, title)
config2=imgkit.config(wkhtmltoimage=path2)
imgkit.from_string(page_good,file_name2,config=config2)

?path1和path2就是咱们安装工具包的位置,给它位置,就相当于把python和这个工具包链接起来了。

format可以使两个大括号里分别放置address和title,这样我们就能有输出文件的位置,以及输出文件的名字了。address和title的获取我们一会儿再说。

下面固定的两行就是固定的写法,就是来把我们拿到的page_good(也就是博客所对应的string格式的源代码)进行转换。

4.其它的获取

address = input("请输入一个要存放的地方\n例如你想存在D盘里的空文件夹gx:D:\gx\n")

obj = re.compile(r'<h1 class="title-article" id="articleContentId">(.*?)</h1>', re.S)
title = obj.findall(resp.text)[0]

address当然需要你预先指定了,好说。

利用正则表达式,对页面源代码进行提取,提取出title,这个应该不难吧。好了,那我简单说一下。先调用re生成一个obj对象,这个对象会对传进去的参数进行查找,有符合引号里面的内容,就把它提取出来。返回的就是(.*?)所代表的内容。

5.完整的代码及执行截图?

?这里我把网站的输入及之后的处理放在了while中,这样,我们就可以输入多个网址进行爬取了。还加了一点提示性语句,这样会使程序更加好看。

import requests
import pdfkit
import imgkit
from lxml import etree
import re

address = input("请输入一个要存放的地方\n例如你想存在D盘里的空文件夹gx:D:\gx\n")
HeadHtml='''
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{}
</body>
</html>'''
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'
}

i = 0
while i == 0:
    #获取响应
    url = input("请输入一个CSDN网址\n")
    resp = requests.get(url, headers=headers)
    #获取博客页面的html(string格式)
    page_html = etree.HTML(resp.text)
    page_content = page_html.xpath("//*[@id='mainBox']/main/div[1]")[0]
    page_string = etree.tostring(page_content, encoding='utf-8').decode('utf-8')
    page_good = HeadHtml.format(page_string)
    #利用正则表达式提取出文章标题
    obj = re.compile(r'<h1 class="title-article" id="articleContentId">(.*?)</h1>', re.S)
    title = obj.findall(resp.text)[0]
    #导入两个工具包路径
    path1 = r'D:\pythonthird\python-pdf-png\wkhtmltopdf\bin\wkhtmltopdf.exe'
    path2 = r'D:\pythonthird\python-pdf-png\wkhtmltopdf\bin\wkhtmltoimage.exe'
    #进行pdf和jpg转换
    print('---正在转换为pdf---\n')
    file_name1 = '{}/{}.pdf'.format(address, title)
    config1 = pdfkit.configuration(wkhtmltopdf=path1)
    pdfkit.from_string(page_good, file_name1, configuration=config1)
    print('---正在转换为图片---\n')
    file_name2 = '{}/{}.jpg'.format(address, title)
    config2=imgkit.config(wkhtmltoimage=path2)
    imgkit.from_string(page_good, file_name2, config=config2)

?

?


?

?

?

?

总结

最后,感谢你能看到这里,你也应该感谢你自己,听我白话那么多。到这里我们就完成了对hq文章的爬取,当然其它文章也可以。这样我们就可以不用联网,来私底下欣赏CSDN博客了。

最后的最后,我知道,大家都“没有装python”,运行不了,没关系。我已经把它打包成了一个windows下的.exe可执行程序,有没有python,没关系,有这个exe就可以爬取。我把它放在了这个链接里,欢迎下载。感谢您的支持。

百度网盘:

链接:https://pan.baidu.com/s/1b0seSrndfux6Hw_3oSJ5cg?
提取码:gx66

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:16:35  更:2022-01-16 13:17:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 12:21:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码