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不生成
python生成c语言代码_Python爬取C语言中文网教程生成PDF相关推荐
- python 制作网站教程_Python爬取网站博客教程并制作成PDF
要把教程变成PDF有三步: 1.先生成空html,爬取每一篇教程放进一个新生成的div,这样就生成了包含所有教程的html文件(BeautifulSoup) 2.将html转换成pdf(wkhtmlt ...
- python爬取豆瓣代码_python爬取豆瓣
在上课时,有时需要显示一个倒计时时钟,让学生做题. PPT 没有简单有效的方法实现倒计时时钟,参考了多个方案,最终决定采用 GIF 动画来实现. 这样使用起来很简单,只要把事先做好的各个时长的倒计时动 ...
- 利用python可以做什么菜_python 爬取菜单生成菜谱,做饭买菜不用愁
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:木下瞳 转载:python 爬取菜单生成菜谱,做饭买菜不用愁mp. ...
- python爬取网页书籍名称代码_python爬取亚马逊书籍信息代码分享
我有个需求就是抓取一些简单的书籍信息存储到mysql数据库,例如,封面图片,书名,类型,作者,简历,出版社,语种. 我比较之后,决定在亚马逊来实现我的需求. 我分析网站后发现,亚马逊有个高级搜索的功能 ...
- python爬取豆瓣代码_python爬取豆瓣视频信息代码
[TOC] 这里是爬取豆瓣视频信息,用pyquery库(jquery的python库). 一:代码 from urllib.request import quote from pyquery impo ...
- python外汇兑换代码_python爬取人民币汇率中间价
python爬取人民币汇率中间价,从最权威的网站中国外汇交易中心. 首先找到相关网页,解析链接,这中间需要经验和耐心,在此不多说. 以人民币兑美元的汇率为例(CNY/USD),脚本详情如下: wind ...
- python爬取ppt代码_Python爬取PPT模板小工具
由于很多PPT抓取工具都会因为版本问题无法使用,所以论坛大神就自己写了这款Python爬取PPT模板小工具,可以帮助用户轻松获取各种PPT模板,使用的时候注意一次只能下载一种类型.软件仅供交流学习,下 ...
- python爬取并下载代码_python 爬取并批量下载网易云歌单源代码
#!/usr/bin/env python#!--*--coding:utf-8 --*-- #![url=home.php?mod=space&uid=238618]@Time[/url] ...
- python电影评论的情感分析流浪地球_python爬取豆瓣流浪地球影评,生成词云
代码很简单,一看就懂. (没有模拟点击,所以都是未展开的) 地址: https://movie.douban.com/subject/26266893/reviews?rating=&star ...
最新文章
- JVM 史上最最最完整深入解析(12000 字噢)
- python中collections_Python中的collections模块
- Sql Server'不允许保存更改'错误►防止保存需要重新创建表的更改
- BZOJ4129: Haruna’s Breakfast
- php中echo js代码,JS有没类似PHP的echo效果?
- springboot配置templates直接访问
- html模板 循环里if,django模板里循环变量table里想要两个一行如何控制
- dump文件解析之探索.Net的内存
- (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】
- vivaldi浏览器_两款可以提升效率的网络浏览器
- 单片机编程:软件定时器
- 大漠插件dm7.2149
- 域渗透——获取用户明文密码
- 《东周列国志》第三十一回 晋惠公怒杀庆郑 介子推割股啖君
- python绘制彩色地震剖面断层解释_断层在地震剖面上的反映及解释
- BLM(业务领导模型)
- 1和4互素吗_互素是什么意思?1~10中与10互素的数有多少个
- 实时换脸技术——直播,视频通话|脸部交换程序
- 类似微信群聊九宫格头像的算法实现
- vue 拖拽功能样式优化
热门文章
- activiti 多租户_Activiti中具有独立数据库架构的多租户
- activemq消息持久化_将ActiveMQ持久消息传递性能提高25倍
- glass fish_Glass Fish 4.0.1中的Jersey SSE功能
- jboss架构_检查Red Hat JBoss BRMS部署架构的规则和事件(第一部分)
- Spring Framework中的作用域代理
- java开发人员_每个Java开发人员都应该阅读的10本书
- 您准备好观看GraphQL了吗?
- java中序列化与反序列化_Java中的序列化
- spring pom设置_Spring社交Twitter设置
- 使用React,Spring Boot和用户身份验证构建CRUD应用程序