最近在csdn上发现不少好文章,便有一个想法把文章保存到本地,于是写了一个小爬虫能下载html文件并转化成pdf,代码逻辑不是很难,使用的htmltopdf工具也很容易下载。
代码如下:

# !/usr/bin/env python
# -*- coding: utf-8 -*-
#@time:2021/9/22 12:32
#author:uuyjp

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

os_path = os.getcwd() + '/blog/'
if not os.path.exists(os_path):
    os.mkdir(os_path)
class csdnSpider(object):

    def __init__(self):
        self.start_url = input('请输入要下载的csdn链接:')
        self.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'
        }

    def parse_start_url(self):
        response = requests.get(self.start_url,headers=self.headers).content.decode()
        # pprint(response)
        self.parse_response(response)

    def parse_response(self,response):
        html_xpath = etree.HTML(response)
        file_name = html_xpath.xpath(r'//h1[@id="articleContentId"]/text()')[0]
        # print(file_name)
        author_name = html_xpath.xpath(r'//a[@id="uid"]/@title')[0]
        # print(author_name)
        '''
        这里xpath是没用的,所以选择css解析数据
        '''
        html_css = parsel.Selector(response)
        self.save_data(html_css,file_name)
    def save_data(self,html_css,file_name):
        data = html_css.css('article').get()
        #创建一个html页面
        html = \
            '''
            <!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <title>首页</title>
            </head>
            <body>
                {}
            </body>
            </html>
            '''.format(data)
        #保存为html文件
        with open(os_path + f'{file_name}.html','w', encoding='utf-8') as f:
            f.write(data)
        #转化为pdf
        try:
            config = pdfkit.configuration(wkhtmltopdf=r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe')
            pdfkit.from_file(os_path +f'{file_name}.html', os_path + f'{file_name}.pdf',configuration=config)
            print(f'文件下载成功:{file_name}.pdf')
        except Exception as e:
            pass

if __name__ == '__main__':
    cs = csdnSpider()
    cs.parse_start_url()

当然采用了面向对象的方式编写,如果有不清楚的地方可以留言。
结果:
在这里插入图片描述
阅读上没大问题,下载后方便整理,反复学习。
妈妈再也不用担心我的学习资料啦。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐