zoukankan      html  css  js  c++  java
  • 爬取博主的所有文章并保存为PDF文件

    继续改进上一个项目,上次我们爬取了所有文章,但是保存为TXT文件,查看不方便,而且还无法保存文章中的代码和图片。

    所以这次保存为PDF文件,方便查看。

    需要的工具:

    1、wkhtmltopdf安装包,下载并安装到电脑上,可使用  pip安装  ,注意环境变量的配置。具体参见下面的资料。

    2、pdfkit文件(whl文件),下载并安装到pycharm上。

    注意安装 whl 文件时:最好吧把 保存 whl文件的文件夹的路径  D:learning pythonScripts  添加到环境变量里面,然后在此文件夹下打开cmd,直接 pip install XXX.whl  即可。

    调用顺序:程序代码会使用pdfkit,pdfkit会调用wkhtmltopdf,而wkhtmltopdf会调用windows中的wkhtmltopdf.exe来转化html为pdf。

    1、在我们原理项目的基础上,修改 get_body 方法,直接返回str(div),而不是div.text。

    def get_body(url):
        """
        获取url下文章的正文内容
        :param url:
        :return:
        """
        html_page = get_html(url)
        soup = BeautifulSoup(html_page,'html.parser')   #HTML文档解析器
        div = soup.find(id = "cnblogs_post_body")
        return str(div)

    2、然后就是主要的下载方法了:

    和之前一样,先创建一个文件夹,然后吧PDF文件下载到刚刚创建的文件夹下面。

    def save_single_file_to_PDF(url):
        """
        首先在py文件同目录下创建一个以博主名字为名的文件,用来存放爬取的所有文章
        将文章正文保存在txt文件中,名字为文章标题
        有些文章的标题可能不适合直接作为txt文件名,我们可以忽略这些文章
        :param url:
        :return:
        """
        global article_count    #使用全局变量,需要在函数中进行标识
        title = get_title(url)
        body = get_body(url)
    
        #获取当前目录文件,截取目录后,并自动创建文件
        FILE_PATH = os.getcwd()[:-0]+author
        if not os.path.exists(FILE_PATH):
            os.makedirs(FILE_PATH)
    
        options = {
            'page-size':'Letter',
            'encoding':"UTF-8",
            'custom-header':[('Accept-Encoding','gzip')]
        }
    
        try:
            filename = title + '.pdf'
    
            # 由于wkhtmltopdf软件的版本问题,只能手动设置软件目录,不然无法调用该软件。
            config = pdfkit.configuration(wkhtmltopdf=r"D:learning pythonwkhtmltopdfinwkhtmltopdf.exe")
            #输出PDF文件
            pdfkit.from_string(body, 'D:learning pythoncoding_python3.6cnblog\Andrew\'+filename, options=options, configuration=config)
    
            article_count += 1  # 计数变量加1,统计总的下载文件数
            print(filename + "  file have saved...")     #提示文章下载完毕
    
        except:
            pass

    但是需要注意的是:如果以上步骤有缺失,可能碰到的问题是:

    1.关于no such file or directory:b'' 这种错误在python中出现时,意味着有.exe文件需要被调用,

    而该.exe文件没有被安装或者在控制面板的环境变量中没有添加该.exe的路径。另外,有时候需要改pdfkit代码为下列两句,才可消除错误:

            # 由于wkhtmltopdf软件的版本问题,只能手动设置软件目录,不然无法调用该软件。
            config = pdfkit.configuration(wkhtmltopdf=r"D:learning pythonwkhtmltopdfinwkhtmltopdf.exe")
            #输出PDF文件
            pdfkit.from_string(body, 'D:learning pythoncoding_python3.6cnblog\Andrew\'+filename, options=options, configuration=config)

    运行结果:

    项目完整代码:我的码云

    参考资料:

    项目启发:http://www.cnblogs.com/xingzhui/p/7887212.html

    pdfkit安装:https://blog.csdn.net/appleyuchi/article/details/70947138

  • 相关阅读:
    Atitti 图像处理 图像混合 图像叠加 blend 原理与实现
    Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
    Atitit 图像处理 灰度图片 灰度化的原理与实现
    Atitit (Sketch Filter)素描滤镜的实现  图像处理  attilax总结
    Atitit 实现java的linq 以及与stream api的比较
    Atitit attilax在自然语言处理领域的成果
    Atitit 图像处理 常用8大滤镜效果 Jhlabs 图像处理类库 java常用图像处理类库
    Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结
    Atitit apache 和guava的反射工具
    atitit。企业的价值观 员工第一 vs 客户第一.docx
  • 原文地址:https://www.cnblogs.com/qsyll0916/p/8678924.html
Copyright © 2011-2022 走看看