python生成c语言代码_Python爬取C语言中文网教程生成PDF

[Python] 纯文本查看 复制代码import requests

from lxml import etree

import re

import os

import pdfkit

def gethtml(url,encode):

r = requests.get(url)

r.encoding = encode

return r.text

def writehtml(path,str):

f = open(path,'w+',encoding='utf-8')

f.write(str)

f.close

def validateTitle(title):

rstr = r"[\/\\\:\*\?\"\<\>\|]"

new_title = re.sub(rstr, "_", title)

return new_title

def mkdir(path):

path = path.strip()

isExists = os.path.exists(path)

if not isExists:

os.makedirs(path)

return True

else:

print('文件夹已存在,请检查后再试!')

return False

def getdata(url,pdf):

print('开始获取,请稍候...')

c_url = url.split('/')[0] + '//' + url.split('/')[2] + '/'

html = gethtml(url,'utf-8')

ehtml = etree.HTML(html)

urll1 = ehtml.xpath('//*[@id="contents"]/dd/a/@href')

till1 = ehtml.xpath('//*[@id="contents"]/dd/a/text()')

s = ehtml.xpath('//*[@id="contents"]/dd/span/text()')

folder=validateTitle(ehtml.xpath('//*[@id="contents"]/dt/a/text()')[0])

if mkdir(savepath+folder):

m = 0

txt=''

for i in urll1:

html = gethtml(c_url + i,'utf-8')

ehtml = etree.HTML(html)

strs = ehtml.xpath('//*[@id="article"]')[-1]

txtl1 = etree.tostring(strs, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")

fname = validateTitle(s[m] + ' ' + till1[m])

txtl1 = re.sub('

.*?

','

'+fname+'

',txtl1)

txtl1 = re.sub('src="/','src="'+c_url+'/',txtl1)

txt=txt+txtl1

#writehtml(savepath+folder+'\\'+fname+'.html', txtl1) #每个章节生成一个html文件

s1 = ehtml.xpath('//*[@id="contents"]/dl/dd/text()')

s2 = ehtml.xpath('//*[@id="contents"]/dl/dd/a/text()')

urll2=ehtml.xpath('//*[@id="contents"]/dl/dd/a/@href')

print(fname)

n=0

for j in urll2:

html=gethtml(c_url+j,'utf-8')

ehtml = etree.HTML(html)

strs = ehtml.xpath('//*[@id="arc-body"]')[-1]

txtl2 = etree.tostring(strs, encoding="utf-8", pretty_print=True, method="html").decode("utf-8")

fname = validateTitle(s1[n]+' '+s2[n])

txtl2= re.sub('','

',txtl2)

txtl2 = re.sub('[2,4]>', '', txtl2)

txtl2 = re.sub('src="/','src="'+c_url+'/',txtl2)

txtl2 = '

' + fname + '

'+txtl2

txt = txt + txtl2

#writehtml(savepath+folder+'\\'+fname + '.html', txtl2) #每个章节生成一个html文件

print(fname)

n+=1

m+=1

writehtml(savepath+folder+'\\'+folder + '.html',txt)

if pdf:

print('开始生成pdf,请稍候...')

path_wk = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe' # wkhtmltopdf安装位置

config = pdfkit.configuration(wkhtmltopdf=path_wk)

options = {

'page-size': 'A4',

'margin-top': '0.75in',

'margin-right': '0.75in',

'margin-bottom': '0.75in',

'margin-left': '0.75in',

'encoding': "UTF-8",

'outline': None

}

pdfkit.from_file([savepath+folder+'\\'+folder + '.html'], savepath+folder+'\\'+folder+'.pdf',options=options,configuration=config)

print('任务完成!')

if __name__ == '__main__':

url = 'http://c.biancheng.net/python/' #获取教程url地址

savepath='C:\\' #保存位置

getdata(url,True) #后面True表示生成PDF,False不生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java登录界面命令_Java命令行界面(第15部分):Jargo

java登录界面命令Jargo在其GitHub主页上定义为“一种减轻程序参数/选项处理的工具”。 当已经存在许多其他命令行处理库时&#xff0c;该页面为另一个命令行处理库提供了基本原理 &#xff0c;该列表的顶部是“因为类型安全性&#xff0c;不变性和可读性很重要”。 Jargo的选项…

QPW 提现申请单表(暂时不做)(tf_cash_apply)

提现申请单表 这是用户提现申请单表&#xff0c;这是一种申请单据。 CREATE TABLE tf_cash_apply (cash_apply_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 申请单ID,cash_order_no bigint(20) NOT NULL UNIQUE COMMENT 提现申请单编号, # 补cash_order varchar(100) NOT…

服务器一键建php网站,搭建服务器 - 我的lnmp一键安装报错 - php中文网博客

https://blog.csdn.net/weixin_34187862/article/details/87668648 链接/usr/local/nginx/conf/nginx.confuser www www;worker_processes auto;error_log /home/wwwlogs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;#Specifies the value for maximum file …

python控制其它软件_从另一个脚本控制python脚本

我正在尝试学习如何编写一个脚本control.py,它在循环中运行另一个脚本test.py一定次数,在每次运行中,读取其输出并在打印某些预定义输出时暂停它(例如文本’现在停止’),并且循环继续其迭代(一旦test.py完成,无论是单独还是强制).所以有一些事情&#xff1a; for i in range(n)…

QPW 用户签署协议日志表(tf_user_agreement_log)

用户签署协议日志表 CREATE TABLE tf_user_agreement_log (log_id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 日志ID,user_id bigint(20) DEFAULT NULL COMMENT 用户ID,agree_id int(11) DEFAULT NULL COMMENT 协议ID,agree_code varchar(32) DEFAULT NULL COMMENT 协议编号…

std::tostring_枚举:如何正确使用name()和toString()方法

std::tostring两种方法之间的区别&#xff1f; Java枚举有两种方法来检索枚举常量的值&#xff1a; name&#xff08;&#xff09;和.toString&#xff08;&#xff09; 。 toString&#xff08;&#xff09;方法调用name&#xff08;&#xff09;方法&#xff0c;该方法返回枚…

php数组按时间排序,按日期时间在PHP中对数组中的数组进行排序

我目前在PHP中有一个问题,我想按照创建日期对这些帖子进行排序,以便它们可以按降序显示.我一直在寻找一个PHP函数来做到这一点,但没有运气.有一个简单的解决方案吗&#xff1f;任何想法将不胜感激:)array0 >arraypost_id > string 1 (length1)user_id > string 3 (len…

没学过编程能学python吗_我没学过编程,能否学会Python?

学习Python编程语言&#xff0c;是大家走入编程世界的最理想选择。那么我没学过编程&#xff0c;能否学会Python?上海Python培训肯定的回答您&#xff1a;of course!完全能学会!设计大师说过&#xff0c;留白是很好的风景&#xff0c;适当的留白是设计的至高境界;对于没有编程…

java登录界面命令_Java命令行界面(第13部分):JArgs

java登录界面命令JArgs 1.0的区别在于&#xff0c;这是我的第13篇文章的主题&#xff0c;该文章是关于Java命令行参数解析的。 JArgs是一个开放源代码&#xff08; BSD许可 &#xff09;库&#xff0c;主要由Steve Purcell和Ewan Mellor等 不同贡献者支持。 事实证明&#xff0…

QPW 企业维度评分表(tf_company_dimesion)

企业维度评分表 用于保存企业每个维度的评分数据&#xff0c;目前企业有5个点评维度&#xff0c;用户可以对这5个维度分别点评&#xff0c;所以企业目前会有5个维度的评分&#xff0c;也就是说企业的每个维度有各自分值、好评率 CREATE TABLE tf_company_dimesion (com_dim_i…

QPW 手机短信验证码发送日志表(tf_sms_send_log)

文章目录手机短信验证码发送日志表需求说明手机短信验证码发送日志表 CREATE TABLE tf_sms_send_log (send_id bigint(11) NOT NULL AUTO_INCREMENT COMMENT 发送ID,user_id bigint(11) DEFAULT NULL COMMENT 用户ID,phone varchar(20) DEFAULT NULL COMMENT 手机号码,validat…

app 应用商店系统php,GitHub - ChhXin/appstore-admin: 基于ThinkPHP的应用商店后台管理系统...

数据库大作业简介ThinkPHP 是一个免费开源的&#xff0c;快速、简单的面向对象的 轻量级PHP开发框架 &#xff0c;创立于2006年初&#xff0c;遵循Apache2开源协议发布&#xff0c;是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计…

java登录界面命令_Java命令行界面(第11部分):CmdLn

java登录界面命令这篇文章介绍了如何使用Ostermiller Java Utilities 1.08.02的CmdLn&#xff08;Java命令行解析器&#xff09;来处理基于Java的应用程序中的命令行参数。 Ostermiller Java实用程序包括几种不同类型的实用程序 &#xff0c;但本文的重点是组件页面上描述的“命…

socket模拟http的登陆_Python网络爬虫之模拟登陆 !

为什么要模拟登陆&#xff1f;Python网络爬虫应用十分广泛&#xff0c;但是有些网页需要用户登陆后才能获取到信息&#xff0c;所以我们的爬虫需要模拟用户的登陆行为&#xff0c;在登陆以后保存登陆信息&#xff0c;以便浏览该页面下的其他页面。保存用户信息模拟登陆后有两种…

QPW 系统管理后台用户表(tm_user_info)

文章目录系统管理后台用户表字段说明系统管理后台用户表 CREATE TABLE tm_user_info (user_id int(11) NOT NULL AUTO_INCREMENT COMMENT 用户ID,user_no varchar(30) DEFAULT NULL COMMENT 用户编号, # 允许用户自定义任意字符的编号&#xff0c;非空时不允许重复&#xff0c…

java登录界面命令_Java命令行界面(第12部分):CLAJR

java登录界面命令第十二篇有关在Java中处理命令行参数的文章的特色库是带有Java Reflection的命令行参数 &#xff08;CLAJR&#xff09;。 该“库”是单个Java源文件&#xff08; CLAJR-0.9.java &#xff09;&#xff0c; 可从SourceForge下载 。 CLAJR的主页当前显示2006年版…

java导出excel搜索下拉框,POI写入Excel下拉框[Select选项]

记录部分方法, 操作POIPOI version3.10-FINALorg.apache.poipoi${poi.version}org.apache.poipoi-ooxml${poi.version}1.首先根据路径读取Excel模板/*** 读取服务器上面的上传的excel文件** param path* return*/public static Workbook readWorkBook(String path) {Workbook w…

openssh rpm包_100台CentOS7要升级OpenSSH怎么办?

背景现在有 100 台 Centos7 需要升级 OpenSSH 到 8.3&#xff0c;怎么办呢&#xff1f;一台台的操作显然不符合我摸鱼的风格&#xff0c;既然每台操作都一样&#xff0c;Ansible Roles 就有用武之地了。正常升级流程首先 rpmbuild 打出 OpenSSH 8.3 的 RPM 包&#xff0c;rpm -…

java 从一个容器获取对象,如何从 Spring IoC 容器中获取对象?

前面几篇文章主要分析了 Spring IoC 容器如何初始化&#xff0c;以及解析和注册我们定义的 bean 信息。其中&#xff0c;「Spring 中的 IoC 容器」对 Spring 中的容器做了一个概述&#xff0c;「Spring IoC 容器初始化」和「Spring IoC 容器初始化(2)」分析了 Spring 如何初始化…

thymeleaf与jsp_PagingAndSortingRepository –如何与Thymeleaf一起使用

thymeleaf与jsp在本教程中&#xff0c;我将演示如何通过分页显示Thymeleaf中的企业客户列表。 1 –项目结构 我们有一个正常的Maven项目结构。 2 –项目依赖性 除了正常的Spring依赖关系之外&#xff0c;我们还添加Thymeleaf和hsqldb&#xff0c;因为我们使用的是嵌入式数据…