python自学软件推荐,Python教程推荐
似乎没有比Python更好的写爬虫的方法了。Python社区为你提供了如此多的爬虫工具,让你眼花缭乱。你可以用各种可以直接使用的库在几分钟内编写一个爬虫。今天我在考虑写一个爬虫,我就顺着廖雪峰的Python教程往下爬,做一个PDF电子书给大家离线阅读。
在写爬虫之前,我们先来分析一下这个网站的页面结构1。网页左侧是教程的目录大纲,每个URL对应右侧的一篇文章。文章标题在右上方,文章正文部分在中间。正文内容是我们关注的重点。我们要抓取的数据是所有网页的正文部分,下面的评论区是用户的评论区。评论区对我们没用,可以忽略。
准备工具
弄清楚网站的基本结构后,就可以开始准备爬虫所依赖的工具包了。请求和美图是爬虫的两大神器。requests用于网络请求,Beautiful Soup用于操作html数据。有了这两个梭子,我们就可以快速工作,不需要像scrapy那样的履带架了。小程序发的时候有点像杀鸡用牛刀。另外,由于html文件转换为pdf,所以应该有相应的库支持。WKHMLTopDF是一个非常好的工具,可以用来把html转换成多平台的pDF。pdfkit是WKHMLTopDF的Python包。首先,安装以下依赖包,然后安装wkhtmltopdf。
pipinstallrequestspipinstallbeautifulsoupppipinstallpdf kit
安装wkhtmltopdf
Windows平台直接安装从WKMLTOPDF官网2下载的稳定版。安装完成后,将程序的执行路径添加到系统环境的$PATH变量中,否则,如果找不到WKMLTOPDF,pdfkit将得到错误“No wkhtmltopdf executable found”。Ubuntu和CentOS可以直接从命令行安装。
$ sudo apt-get install wkhtmltopdf # Ubuntu $ sudo yum int sall wkhtmltopdf # centos
爬虫实现
一切准备就绪,就可以加载代码了,但是在写代码之前,你要把自己的思路整理好。程序的目的是将所有URL对应的html文本部分保存在本地,然后使用pdfkit将这些文件转换成一个pdf文件。让我们分担任务。首先在本地保存某个URL对应的html文本,然后找到所有的URL进行同样的操作。
用Chrome浏览器找到页面正文部分的标签,按F12找到对应的div标签:就是网页的正文内容。在整个页面被请求本地加载后,可以使用beautifulsoup操纵HTML的dom元素来提取正文内容。
具体实现代码如下:使用soup.find_all函数找到正文标签,然后将正文部分的内容保存到a.html文件中。
def parse _ URL _ to _ html(URL):response=requests . get(URL)soup=beautiful soup(response . content, html 5 lib )body=soup . find _ all(class _= x-wiki-content )[]html=str(body)with open( a . html , wb)asf: f.write(html)
第二步是解析页面左侧的所有URL。用同样的方法,找到左边的菜单标签。
具体代码实现逻辑:因为页面上有uk-nav uk-nav-side两个类属性,真实目录列表是第二个。获取所有的URL,第一步写URL到html的函数。
Get _ URL _ list(): 获取所有URL目录的列表 response=requests . Get( 3358 www.liaoxuefeng.com/wiki/0014316089557264A 6b 348958 f 449949 df 42 a 6 D3 e 542 c 000 )soup=beautiful soup(response . content, html 5 lib )menu _ tag=soup . find _ all(class _= uk-nav uk-nav-side )[1]URLs=[]for liin menu _ tag . find _ all( Li ):URL= http://www
最后一步是将html转换成pdf文件。转换成pdf文件非常简单,因为pdfkit封装了所有的逻辑,你只需要调用函数pdfkit.from_file。
save _ pdf(HTML): 将所有HTML文件转换为PDF文件 options={page-size: letter , encoding: UTF-8 , custom-header :[( accept-encoding , gzip)]
执行save_pdf函数,电子书pdf文件就生成了。效果图为:
摘要
代码总量加起来不到50行。然而,等一下。实际上,上面给出的代码省略了一些细节,比如,如何获取文章的标题。正文内容的img标签使用相对路径。如果要正常显示pdf中的图片,需要将相对路径改为绝对路径。此外,保存的html临时文件应该被删除。这些细节最后的叶子放在github上。
完整代码可以从github下载,代码在Windows平台有效。欢迎fork下载,自行完善。Github地址3,无法访问GitHub的同学可以使用CodeCloud 4,《廖雪峰的 Python 教程》电子书pdf文件。可以关注微信官方账号的“娴python禅”回复“PDF”免费下载阅读。
Python网络爬虫与数据挖掘
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。