文章目录

一、分析写代码的思路

二、代码步骤

1.导入需要的库

2.分析某个博客的主页

3.提取需要的数据

4.遍历博主的每个文章的网址

5.构造html网页

6.创建文件夹

7.保存html文件

8.将html文件转换成pdf文件

三. 总代码及结果

总结


一、分析写代码的思路

1.作者url+headers
2.看作者所在的url是否是静态网页
3.解析网页,获取作者的每个作品的url,及作者名字
4.根据每个作品url继续访问,然后数据分析
5.提取html文本字符串,标题
6.创建文件夹
7.保存html文本
8.转换pdf文本

二、代码步骤

1.导入需要的库

代码如下(示例):

import requests,parsel,os,pdfkit
from lxml import etree

2.分析某个博客的主页

2.1.任意点进某个博主的网页,例如:“w要变强”的博主

2.2 点击开发者工具,刷新加载出博主主页的网址

2.3 右键点击查看网页源代码,发现博主主页为静态网页,这里我选择了xpath解析网页,当然还可以用css选择器,beautifulsoup等其他解析器

代码如下:

    #1.author_url+headersauthor_url=input('请输入csdn博主的url:')headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari/537.36'}response = requests.get(author_url,headers=headers).text# 2.作者所在的url是静态网页,xpath解析每个作品urlhtml_xpath = etree.HTML(response)

3.提取需要的数据

3.1提取博客的名字和所有作品的url

代码如下:

    try:author_name = html_xpath.xpath(r'//*[@class="user-profile-head-name"]/div/text()')[0]# print(author_name)author_book_urls = html_xpath.xpath(r'//*[@class="blog-list-box"]/a/@href')# pprint(author_book_urls)except Exception as e:author_name = html_xpath.xpath(r'//*[@id="uid"]/span/text()')[0]author_book_urls = html_xpath.xpath(r'//*[@class="article-list"]/div/h4/a/@href')

元素的xpath路径可以直接copy的,对于这里用的异常处理我稍微解释下:其实还有少部分博主的主页是不同的,例如:

分析方法都一样,只是元素xpath路径不同而已,因此无论是哪种形式通过异常处理都能提取出作品urls及名字。

4.遍历博主的每个文章的网址

4.1 每个作品网页也为静态网页,发送请求,获取响应并解析

代码如下:

    for author_book_url in author_book_urls:book_res = requests.get(author_book_url,headers = headers).text#4.将响应分别用xpath,css选择器解析html_book_xpath = etree.HTML(book_res)html_book_css = parsel.Selector(book_res)

4.2 css选择器提取文章的html文本,xpath提取文章标题

代码如下:

        book_title = html_book_xpath.xpath(r'//*[@id="articleContentId"]/text()')[0]html_book_content = html_book_css.css('#mainBox > main > div.blog-content-box').get()

5.构造html网页

​
​#5.拼接构造网页框架,加入文章html内容html =\'''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>{}</body></html>'''.format(html_book_content)​​

6.创建文件夹

        #6.创建博主文件夹if not os.path.exists(r'./{}'.format(author_name)):os.mkdir(r'./{}'.format(author_name))

7.保存html文件

        #6.保存html文本try:with open(r'./{}/{}.html'.format(author_name,book_title),'w',encoding='utf-8') as f:f.write(html)print('***{}.html文件下载成功****'.format(book_title))except Exception as e:continue

8.将html文件转换成pdf文件

转换文件物理条件:需要下载wkhtmltopdf.exe驱动文件喔!

​#8.转换pdf文本,导入pdfkit包try:config = pdfkit.configuration(wkhtmltopdf=r'D:\programs\wkhtmltopdf\bin\wkhtmltopdf.exe')pdfkit.from_file(r'./{}/{}.html'.format(author_name,book_title),'./{}/{}.pdf'.format(author_name,book_title),configuration=config)print(r'******{}.pdf文件保存成功******'.format(book_title))except Exception as e:continue​

三. 总代码及结果

# !/usr/bin/env python
# -*- coding: utf-8 -*-'''实现目标:爬某一博主的所有博客1.作者url+headers2.看作者所在的url是否是静态网页3.解析网页,获取作者的每个作品的url,及作者名字4.根据每个作品url继续访问,然后数据分析5.提取html文本,标题6.创建多级文件夹7.保存html文本8.转换pdf文本
'''
import requests,parsel,os,pdfkit
from lxml import etree
from pprint import pprint
def main():#1.author_url+headersauthor_url=input('请输入csdn博主的url:')headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/87.0.4280.88 Safari/537.36'}response = requests.get(author_url,headers=headers).text# 2.作者所在的url是静态网页,xpath解析每个文章urlhtml_xpath = etree.HTML(response)try:author_name = html_xpath.xpath(r'//*[@class="user-profile-head-name"]/div/text()')[0]# print(author_name)author_book_urls = html_xpath.xpath(r'//*[@class="blog-list-box"]/a/@href')# print(author_book_urls)except Exception as e:author_name = html_xpath.xpath(r'//*[@id="uid"]/span/text()')[0]author_book_urls = html_xpath.xpath(r'//*[@class="article-list"]/div/h4/a/@href')# print(author_name,author_book_urls,sep='\n')#3.遍历循环每个作品网址,请求网页for author_book_url in author_book_urls:book_res = requests.get(author_book_url,headers = headers).text#4.将响应分别用xpath,css选择器解析html_book_xpath = etree.HTML(book_res)html_book_css = parsel.Selector(book_res)book_title = html_book_xpath.xpath(r'//*[@id="articleContentId"]/text()')[0]html_book_content = html_book_css.css('#mainBox > main > div.blog-content-box').get()#5.拼接构造网页框架,加入文章html内容html =\'''<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title></head><body>{}</body></html>'''.format(html_book_content)#6.创建博主文件夹if not os.path.exists(r'./{}'.format(author_name)):os.mkdir(r'./{}'.format(author_name))#7.保存html文本try:with open(r'./{}/{}.html'.format(author_name,book_title),'w',encoding='utf-8') as f:f.write(html)print('***{}.html文件下载成功****'.format(book_title))except Exception as e:continue#8.转换pdf文本,导转换包try:config = pdfkit.configuration(wkhtmltopdf=r'D:\programs\wkhtmltopdf\bin\wkhtmltopdf.exe')pdfkit.from_file(r'./{}/{}.html'.format(author_name,book_title),'./{}/{}.pdf'.format(author_name,book_title),configuration=config)print(r'******{}.pdf文件保存成功******'.format(book_title))except Exception as e:continueif __name__ == '__main__':main()


总结

以上就是今天要讲的内容,本文介绍了如何下载csdn上博主的所有文章,并保存成pdf文件!如果本篇博客对您有一定的帮助,大家记得留言+点赞哦。

如何下载csdn的文章并保存成pdf格式呢?并实现某个博主的全部博文下载?相关推荐

  1. Android文本保存成PDF格式

    支持Android文本保存成PDF格式,Canvas画图保存JPG格式导出PDF格式,使用itextpdf-5.5.1.jar包 项目地址:http://download.csdn.net/downl ...

  2. CAD图纸编辑完成后保存成PDF格式怎么操作?

    平时在我们对CAD图纸的绘制过程中,经常需要对CAD图纸的格式进行转换,因为CAD格式的图纸在一般常见的看图软件中是无法打开的,需要在特定的环境中才可以打开,这就需要我们在图纸绘制完成后保存为易于查看 ...

  3. (Java篇)爬取微信公众号文章并保存为 PDF 格式

    前言 背景: 某一天,拿着自己的手机看着技术文章,然而手机看技术文章,有时候确实蛋疼,因为一旦代码多起来,小屏幕看的还是眼花:又或者某一天觉得这一篇文章,觉得写的很棒棒哦,于是先收藏,打算过几天看,然 ...

  4. python制作标书_Python爬取比比网中标标书并保存成PDF格式

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. python开发环境 python 3.6 pycharm requests parsel ...

  5. 计算机怎样保存文件格式,word文档怎样保存为pdf格式

    word文档怎样保存为pdf格式 篇一:WORD2013将文档转存为PDF阅读格式 ①首先启动Word2013,单击文件--打开--计算机--桌面,我通常文件都是放桌面,大家可以点击浏览按钮. ②将需 ...

  6. 将txt转换成pdf格式的操作方法

    一般办公或是学习过程中,我们将一些有用的文字资料保存在Word.TXT等文档中,而有时需要将已经编辑.打印好的材料,做成PDF格式的电子书,以供我们日后查阅使用.如果在两者之间通过一块块地复制.粘贴. ...

  7. 一零二八、将csdn文章内容保存成 html、pdf、md格式

    目录 一.获取专栏地址 二.下载转换工具 三.创建HTML MD PDF 文件夹 四.启动程序 五.源代码 代码思路: 1.确定目标需求:将csdn文章内容保存成 HTML.PDF.md格式- 1.1 ...

  8. dataframe保存为txt_竟然可以用 Python 抓取公号文章保存成 PDF

    . 游戏的多维数据集的形状概念 Python技术 人生苦短,我用 Python! 今天为大家介绍如何将自己喜欢的公众号的历史文章转成 PDF 保存到本地.前几天还有朋友再问,能不能帮把某某公众号的文章 ...

  9. python response重头开始_用 Python 抓取公号文章保存成 PDF

    今天为大家介绍如何将自己喜欢的公众号的历史文章转成 PDF 保存到本地.前几天还有朋友再问,能不能帮把某某公众号的文章下载下来,因为他很喜欢这个号的文章,但由于微信上查看历史文章不能排序,一些较早期的 ...

  10. 将CSDN文章内容转成PDF文件使用教程

    目录 1.CSDN文章链接地址 2.操作步骤 (1)设置浏览器页面字体大小 (2)浏览器控制台执行代码段,配置打印 I.浏览器Console II.更多设置-边距 3.下方附CSDN文章,可直接执行的 ...

最新文章

  1. 书评 | 圈内大佬怎么看编程日历
  2. mysql索引4种结构_mysql索引:四种类型,两种方法
  3. javascript封装与多态的体现
  4. 鸿蒙os即将升级,央视爆料鸿蒙OS即将升级,荣耀智慧屏强大自研开启国货新时代...
  5. Enterprise Library 5.0 开发向导- 简介(1)
  6. php上传,PHP-文件上传和下载「程序员培养之路第三十八天」
  7. Buildroot构建指南--Overview
  8. 內嵌html字符串顯示
  9. Linux基础----Makefile文件的编写
  10. linux 命令 —— cp
  11. 详解单例模式线程安全
  12. [渝粤教育] 北京理工大学 工程热力学 参考 资料
  13. python 水晶报表_水晶报表连接Oracle做数据报表笔记
  14. 今年最烂密码出炉,一秒钟就破解!你中枪了没?
  15. seo日常工作表_seo专员日常工作内容是什么?
  16. 《数据结构》八大排序(详细图文分析讲解)
  17. 实战案例 | Scrapy 集成Selenium爬取智联招聘数据
  18. 占星家眼中的十二星座--处女座
  19. 科全可拓展免费进销存系统
  20. 如何用js判断设备类型?

热门文章

  1. 【100个 Unity小知识点】☀️ | Unity中显示运行时游戏帧率的方法
  2. Python爬虫基本代码附解析
  3. cad卸载_CAD绘图效率太低?1GCAD逆天插件送给你,用了再也不卸载
  4. windows环境下sqlmap安装教程及问题详解
  5. Industrial Design System v4.5 1CD(工业产品设计软件)
  6. 彭国伦Fortran95学习笔记(一)第八章至第十六章
  7. html用户名注册登录代码,HTML用户注册界面的实现
  8. 实现应用于AlphaGo得增强式学习算法,代码实现1
  9. go程序员面试算法宝典 pdf_Go程序员面试算法宝典
  10. 数学建模综合评价方法