Python: obtenga el contenido de la página web de CSDN y la salida como pdf

Debido a que el maestro solicitó que el texto original de la referencia se incluyera en el informe del experimento, se compiló este documento. (La tarea es la mejor motivación

La herramienta pdf de Python todavía es muy completa, esta vez se usa la interfaz wkhtmltopdf

Debido a que básicamente no se informa ningún error, está escrito como un formulario de operación de línea de comando

Solo se puede procesar una URL a la vez

Como lo escribí de acuerdo con mis necesidades, lo puse en el blog solo para que mis amigos se refirieran a las ideas y lo modificaran según mis propias necesidades ~

#!/usr/bin/python
#@Author: zhongshsh

import requests
from bs4 import BeautifulSoup, NavigableString
import urllib
import pdfkit
import sys

# 获取网页内容
def get_html(url):
        headers = {
    
    
        'User-Agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_11_4)\
        AppleWebKit/537.36(KHTML, like Gecko) Chrome/52 .0.2743. 116 Safari/537.36'
        }
        response = requests.get(url, headers=headers)
        return response.text

# 删除超链接,保留标签内的内容
def strip_tags(html, invalid_tags):
    soup = BeautifulSoup(html, 'lxml')
    for tag in soup.findAll(True):
        if tag.name in invalid_tags:
            s = ""
            for c in tag.contents:
                if not isinstance(c, NavigableString):
                    c = strip_tags(str(c), invalid_tags)
                s += str(c)
            tag.replaceWith(s)
    return soup

# 删除一些标签
def strip_ct(soup):
    [s.extract() for s in soup(class_="article-bar-top")]
    [s.extract() for s in soup(class_="href-article-edit slide-toggle")]
    [s.extract() for s in soup(class_="person-messagebox")]
    return soup

# 过滤网页信息
def get_main(html):
    soup = BeautifulSoup(html,'lxml')
    i=strip_tags(str(strip_ct(soup.find(attrs={
    
    'class':"blog-content-box"}))),['a'])
    return str(i)

# 生成pdf
def html_pdf(html):
    path_wkthmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
    options = {
    
    
        'page-size':'A4',
        'margin-top': '0.75in',
        'margin-right': '0.75in',
        'margin-bottom': '0.75in',
        'margin-left': '0.75in',
        'encoding': "UTF-8",
        'custom-header': [
            ('Accept-Encoding', 'gzip')
        ],
        'cookie': [
            ('cookie-name1', 'cookie-value1'),
            ('cookie-name2', 'cookie-value2'),
        ],
        'no-outline': None
    }
    config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
    pdfkit.from_string(html, 'data.pdf', options=options, configuration=config)


if __name__ == '__main__':
    url = sys.argv[1]
    with open('data.pdf', 'w') as f:
        f.write('')
    # url_list = ['https://blog.csdn.net/u013803499/article/details/82877993']
    html_pdf(get_main(get_html(url)))

Captura de pantalla parcial del resultado

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/MaoziYa/article/details/105896212
Recomendado
Clasificación