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

该代码实现从指定URL抓取网页内容,利用lxml和requests库解析HTML,提取文章章节并保存为HTML文件。同时,可以将所有章节整合成一个PDF文件,使用了pdfkit库进行转换。整个过程涉及网页解析、文件操作和PDF生成。
摘要由CSDN通过智能技术生成

[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不生成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值