当前位置: 首页 > 后端技术 > Python

Python爬虫:把教程转成PDF电子书

时间:2023-03-26 15:12:34 Python

写爬虫好像比用Python更合适。Python社区提供的爬虫工具多得让你眼花缭乱。各种可以直接使用的库,分分钟就可以使用写一个爬虫,今天想写一个爬虫,把廖雪峰的Python教程爬取,做成PDF电子书,供大家离线阅读。在开始写爬虫之前,我们先分析一下网站的页面结构1.网页左侧是教程的目录大纲,右侧每个URL对应一篇文章。正文部分,正文内容是我们关注的重点。我们要爬取的数据是所有网页的文本部分。下面是用户的评论区。评论区对我们没有用处,可以忽略。工具准备在搞清楚了网站的基本结构之后,就可以开始准备爬虫所依赖的工具包了。requests和beautifulsoup是爬虫的两大神器,reuqests用于网络请求,beautifulsoup用于操作html数据。有了这两辆穿梭车,我们的工作就可以很快了。我们不需要像scrapy这样的爬虫框架。这对小程序来说有点大材小用。另外,既然是html文件转pdf,就必须要有相应的库支持,wkhtmltopdf是一个很好的工具,可以用于多平台html转pdf,pdfkit是wkhtmltopdf的Python包。首先安装如下依赖包,然后安装wkhtmltopdfpipinstallrequestsspipinstallbeautifulsouppipinstallpdfkitinstallwkhtmltopdfWindows平台直接从wkhtmltopdf官网下载稳定版2安装即可。安装完成后,将程序的执行路径添加到系统环境的$PATH变量中。否则pdfkit找不到wkhtmltopdf,会出现“Nowkhtmltopdfexecutablefound”的错误。Ubuntu和CentOS可以直接使用命令行安装$sudoapt-getinstallwkhtmltopdf#ubuntu$sudoyumintsallwkhtmltopdf#centos爬虫实现一切准备就绪后,就可以上传代码了,但是在写代码之前,需要整理一下你的想法第一。程序的目的是将所有url对应的html文本部分保存到本地,然后使用pdfkit将这些文件转换成pdf文件。让我们拆分任务。首先将某个URL对应的html文本保存到本地,然后查找所有的URL进行同样的操作。使用Chrome浏览器找到页面文字部分的标签,按F12找到文字对应的div标签:,这个div就是网页的文字内容页。使用requests将整个页面加载到本地后,就可以使用beautifulsoup操作HTMLdom元素提取文本内容。具体实现代码如下:使用soup.find\_all函数找到text标签,然后将text部分的内容保存到a.html文件中。defparse_url_to_html(url):response=requests.get(url)soup=BeautifulSoup(response.content,"html5lib")body=soup.find_all(class_="x-wiki-content")[0]html=str(body)withopen("a.html",'wb')asf:f.write(html)第二步解析页面左侧的所有URL。同理找到左侧菜单标签具体代码实现逻辑:因为页面中有两个类属性uk-navuk-nav-side,和真正的目录列表是第二个。所有的url都已经拿到了,把url转html的函数也写在了第一步中。defget_url_list():"""获取所有URL目录列表"""response=requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000")soup=BeautifulSoup(response.content),"html5menu_tag=soup.find_all(class_="uk-navuk-nav-side")[1]urls=[]forliinmenu_tag.find_all("li"):url="http://www.liaoxuefeng.com"+li.a.get('href')urls.append(url)returnurls最后一步就是把html转成pdf文件。转成pdf文件很简单,因为pdfkit封装了所有的逻辑,你只需要调用函数pdfkit.from\_filedefsave_pdf(htmls):"""Convertallhtmlfilestopdffiles"""options={'page-size':'Letter','encoding':"UTF-8",'custom-header':[('Accept-Encoding','gzip')]}pdfkit.from_file(htmls,file_name,options=options)执行save\_pdf函数,生成电子书pdf文件效果图:本文转载自https://juejin.cn/post/6844903463063650311如有侵权请联系删除。