python爬取网页转换为PDF文件

 更新时间:2018年06月07日 15:02:19   作者:moluchase  
这篇文章主要为大家详细介绍了python爬取网页转换为PDF文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

爬虫的起因

官方文档或手册虽然可以查阅,但是如果变成纸质版的岂不是更容易翻阅与记忆。如果简单的复制粘贴,不知道何时能够完成。于是便开始想着将Android的官方手册爬下来。

全篇的实现思路

  1. 分析网页
  2. 学会使用BeautifulSoup库
  3. 爬取并导出

参考资料:

* 把廖雪峰的教程转换为PDF电子书
* Requests文档
* Beautiful Soup文档

配置

在Ubuntu下使用Pycharm运行成功
转PDF需要下载wkhtmltopdf

具体过程

网页分析

如下所示的一个网页,要做的是获取该网页的正文和标题,以及左边导航条的所有网址

接下来的工作就是找到这些标签喽…

关于Requests的使用

详细参考文档

proxies={
 "http":"http://vpn的IP:port",
 "https":"https://vpn的IP:port",
 }

response=requests.get(url,proxies=proxies)

Beautiful Soup的使用

参考资料里面有Beautiful Soup文档,将其看完后,可以知道就讲了两件事:一个是查找标签,一个是修改标签。
本文需要做的是:

1. 获取标题和所有的网址,涉及到的是查找标签

#对标签进行判断,一个标签含有href而不含有description,则返回true
#而我希望获取的是含有href属性而不含有description属性的<a>标签,(且只有a标签含有href)
def has_href_but_no_des(tag):
 return tag.has_attr('href') and not tag.has_attr('description')

#网页分析,获取网址和标题
def parse_url_to_html(url):

 response=requests.get(url,proxies=proxies)
 soup=BeautifulSoup(response.content,"html.parser")
 s=[]#获取所有的网址
 title=[]#获取对应的标题
 tag=soup.find(id="nav")#获取第一个id为"nav"的标签,这个里面包含了网址和标题
 for i in tag.find_all(has_href_but_no_des):
 s.append(i['href'])
 title.append(i.text)

 #获取的只是标签集,需要加html前缀
 htmls = "<html><head><meta charset='UTF-8'></head><body>"
 with open("android_training_3.html",'a') as f:
 f.write(htmls)

对上面获取的网址分析,获取正文,并将图片取出存于本地;涉及到的是查找标签和修改属性

#网页操作,获取正文及图片
def get_htmls(urls,title):

 for i in range(len(urls)):
 response=requests.get(urls[i],proxies=proxies)
 soup=BeautifulSoup(response.content,"html.parser")
 htmls="<div><h1>"+str(i)+"."+title[i]+"</h1></div>"
 tag=soup.find(class_='jd-descr')
 #为image添加相对路径,并下载图片
 for img in tag.find_all('img'):
  im = requests.get(img['src'], proxies=proxies)
  filename = os.path.split(img['src'])[1]
  with open('image/' + filename, 'wb') as f:
  f.write(im.content)
  img['src']='image/'+filename
 htmls=htmls+str(tag)
 with open("android_training_3.html",'a') as f:
  f.write(htmls)
 print(" (%s) [%s] download end"%(i,title[i]))
 htmls="</body></html>"
 with open("android_training_3.html",'a') as f:
 f.write(htmls)

2.转为PDF

这一步需要下载wkhtmltopdf,在Windows下执行程序一直出错..Ubuntu下可以

def save_pdf(html):
 """
 把所有html文件转换成pdf文件
 """
 options = {
 'page-size': 'Letter',
 'encoding': "UTF-8",
 'custom-header': [
  ('Accept-Encoding', 'gzip')
 ]
 }
 pdfkit.from_file(html, "android_training_3.pdf", options=options)

最后的效果图

这里写图片描述

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Matplotlib实战之面积图绘制详解

    Matplotlib实战之面积图绘制详解

    面积图,或称区域图,是一种随有序变量的变化,反映数值变化的统计图表,这篇文章主要介绍了如何利用Matplotlib实现面积图的绘制,需要的可以参考下
    2023-08-08
  • 解决Python中的modf()函数取小数部分不准确问题

    解决Python中的modf()函数取小数部分不准确问题

    这篇文章主要介绍了解决Python中的modf()函数取小数部分不准确问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • django中path函数使用详解

    django中path函数使用详解

    django.urls.path是Django中用于定义URL映射规则的函数之一,本文主要介绍了django中path函数使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 跟老齐学Python之字典,你还记得吗?

    跟老齐学Python之字典,你还记得吗?

    在python中,也有一种数据与此相近,不仅相近,这种数据的名称就叫做dictionary,翻译过来是字典,类似于前面的int/str/list,这种类型数据名称是:dict
    2014-09-09
  • Python使用pyecharts控件绘制图表

    Python使用pyecharts控件绘制图表

    这篇文章介绍了Python使用pyecharts控件绘制图表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • python实现的B站直播录制工具

    python实现的B站直播录制工具

    这篇文章主要介绍了python实现的B站直播录播工具,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • Python 代码中的 yield 关键字到底是什么

    Python 代码中的 yield 关键字到底是什么

    yield是Python中一个强大的工具,它可以帮助你以一种高效的方式处理大量数据,理解yield的工作原理对于掌握Python编程至关重要,这篇文章主要介绍了Python 代码中的 yield 到底是什么,需要的朋友可以参考下
    2024-07-07
  • Python简单爬虫导出CSV文件的实例讲解

    Python简单爬虫导出CSV文件的实例讲解

    今天小编就为大家分享一篇Python简单爬虫导出CSV文件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python的函数使用介绍

    Python的函数使用介绍

    这篇文章主要介绍了Python的函数使用,在两种python循环语句的使用中,不仅仅是循环条件达到才能跳出循环体。所以,在对python函数进行阐述之前,先对跳出循环的简单语句块进行介绍,需要的朋友可以参考一下
    2021-12-12
  • Python基于pygame实现的弹力球效果(附源码)

    Python基于pygame实现的弹力球效果(附源码)

    这篇文章主要介绍了Python基于pygame实现的弹力球效果,涉及pygame图形动态操作的相关的技巧,并附带了完整的源码供读者下载参考,需要的朋友可以参考下
    2015-11-11

最新评论