欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信学习资料可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。

想要把教程变成PDF有三步:

1、先生成空html,爬取每一篇教程放进一个新生成的div,这样就生成了包含所有教程的html文件(BeautifulSoup)

2、将html转换成pdf(wkhtmltopdf)

3、由于反爬做的比较好,在爬取的过程中还需要代理ip(免费 or 付费)

开始使用

将一段文档传入 BeautifulSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄.

如下所示:

首先,文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码.

然后,Beautiful Soup选择最合适的解析器来解析这段文档,如果手动指定解析器那么Beautiful Soup会选择指定的解析器来解析文档.

对象的种类

Beautiful Soup 将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为 4 种: Tag , NavigableString , BeautifulSoup , Comment .

Tag:通俗点讲就是 HTML 中的一个个标签,类似 div,p。

NavigableString:获取标签内部的文字,如,soup.p.string。

BeautifulSoup:表示一个文档的全部内容。

Comment:Comment 对象是一个特殊类型的 NavigableString 对象,其输出的内容不包括注释符号.

Tag

Tag就是html中的一个标签,用BeautifulSoup就能解析出来Tag的具体内容,具体的格式为soup.name,其中name是html下的标签,具体实例如下:

print soup.title输出title标签下的内容,包括此标签,这个将会输出

print soup.head输出head标签下的内容

如果 Tag 对象要获取的标签有多个的话,它只会返回所以内容中第一个符合要求的标签

Tag 属性

每个 Tag 有两个重要的属性 name 和 attrs:

name:对于Tag,它的name就是其本身,如soup.p.name就是p

attrs是一个字典类型的,对应的是属性-值,如print soup.p.attrs,输出的就是{'class': ['title'], 'name': 'dromouse'},当然你也可以得到具体的值,如print soup.p.attrs['class'],输出的就是[title]是一个列表的类型,因为一个属性可能对应多个值,当然你也可以通过get方法得到属性的,如:print soup.p.get('class')。还可以直接使用print soup.p['class']

get

get方法用于得到标签下的属性值,注意这是一个重要的方法,在许多场合都能用到,比如你要得到标签下的图像url,那么就可以用soup.img.get('src'),具体解析如下:

# 得到第一个p标签下的src属性printsoup.p.get("class")

string

得到标签下的文本内容,只有在此标签下没有子标签,或者只有一个子标签的情况下才能返回其中的内容,否则返回的是None具体实例如下:

# 在上面的一段文本中p标签没有子标签,因此能够正确返回文本的内容printsoup.p.string# 这里得到的就是None,因为这里的html中有很多的子标签printsoup.html.string

get_text()

可以获得一个标签中的所有文本内容,包括子孙节点的内容,这是最常用的方法

搜索文档树

BeautifulSoup 主要用来遍历子节点及子节点的属性,通过Tag取属性的方式只能获得当前文档中的第一个 tag,例如,soup.p。如果想要得到所有的

标签,或是通过名字得到比一个 tag 更多的内容的时候,就需要用到 find_all()

find_all(name, attrs, recursive, text, **kwargs )

find_all是用于搜索节点中所有符合过滤条件的节点。

name参数:是Tag的名字,如p,div,title

# 1. 节点名print(soup.find_all('p'))# 2. 正则表达式print(soup.find_all(re.compile('^p')))# 3. 列表 print(soup.find_all(['p','a']))

另外 attrs 参数可以也作为过滤条件来获取内容,而 limit 参数是限制返回的条数。

CSS 选择器

以 CSS 语法为匹配标准找到 Tag。同样也是使用到一个函数,该函数为select(),返回类型是 list。它的具体用法如下:

# 1. 通过 tag 标签查找print(soup.select(head))# 2. 通过 id 查找print(soup.select('#link1'))# 3. 通过 class 查找print(soup.select('.sister'))# 4. 通过属性查找print(soup.select('p[name=dromouse]'))# 5. 组合查找print(soup.select("body p"))

wkhtmltopdf

wkhtmltopdf主要用于HTML生成PDF。

pdfkit是基于wkhtmltopdf的python封装,支持URL,本地文件,文本内容到PDF的转换,其最终还是调用wkhtmltopdf命令。

安装

先安装wkhtmltopdf,再安装pdfkit。

https://wkhtmltopdf.org/downloads.html

pdfkit

shell pip3 install pdfkit

转换url/file/string

importpdfkitpdfkit.from_url('http://google.com','out.pdf')pdfkit.from_file('index.html','out.pdf')pdfkit.from_string('Hello!','out.pdf')

转换url或者文件名列表

pdfkit.from_url(['google.com','baidu.com'],'out.pdf')pdfkit.from_file(['file1.html','file2.html'],'out.pdf')

转换打开文件

withopen('file.html')asf: pdfkit.from_file(f,'out.pdf')

自定义设置

使用代理ip

爬取十几篇教程之后触发了这个错误:

看来廖大的反爬虫做的很好,于是只好使用代理ip了,尝试了免费的西刺免费代理后,最后选择了付费的 阿布云 ,感觉响应速度和稳定性还OK。

运行结果

运行过程截图:

运行过程

生成的效果图:

效果图

代码如下:

python beautiful soup 标签完全相同_Python爬取Python教程并制作成pdf相关推荐

  1. python 制作网站教程_Python爬取网站博客教程并制作成PDF

    要把教程变成PDF有三步: 1.先生成空html,爬取每一篇教程放进一个新生成的div,这样就生成了包含所有教程的html文件(BeautifulSoup) 2.将html转换成pdf(wkhtmlt ...

  2. python爬虫网页中的图片_Python爬取网页中的图片(搜狗图片)详解

    前言 最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片http://pic.s ...

  3. python爬虫数据分析项目 双十一_Python爬取淘宝商品数据,价值千元的爬虫外包项目!...

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 完整代码可以点击下方链 ...

  4. python云图制作壮观天体照_Python爬取个人博客,带你制作高逼格的数据聚合云图...

    点击上方"中兴开发者社区",关注我们 每天读一篇一线开发者原创好文 本文出自方志朋的博客 链接:http://blog.csdn.net/forezp/article/detail ...

  5. python知乎爬虫收藏夹_Python爬取知乎问题收藏夹 爬虫入门

    简介 知乎的网站是比较好爬的,没有复杂的反爬手段,适合初学爬虫的人作为练习 因为刚刚入门python,所以只是先把知乎上热门问题的一些主要信息保存到数据库中,待以后使用这些信息进行数据分析,爬取的网页 ...

  6. python 数据分析 书籍推荐 知乎_Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书!...

    原标题:Python 爬取知乎 9674 个问答,揭秘最受欢迎的 98 本书! 作者 | Yura 责编 | 胡巍巍 高尔基这话有没有道理我不知道, 咱也不敢问, 主要是现在也问不了. 那对我来说,读 ...

  7. python 24位图转 8位_Python爬取PPT模板小工具下载-Python爬取PPT模板小工具免费版下载v1.0...

    由于很多PPT抓取工具都会因为版本问题无法使用,所以论坛大神就自己写了这款Python爬取PPT模板小工具,可以帮助用户轻松获取各种PPT模板,使用的时候注意一次只能下载一种类型.软件仅供交流学习,下 ...

  8. 怎么用python做我的世界皮肤_Python爬取mc皮肤【爬虫项目】

    首先,找到一个皮肤网站,其中一个著名的皮肤网站就是 A fast, reliable, free Minecraft skin hosting server. .进入网站,我们就会见到一堆皮肤,这就是 ...

  9. python爬虫公众号音频源代码_python爬取音频下载的示例代码

    抓取"xmly"鬼故事音频 import json # 在这个url,音频链接为JSON动态生成,所以用到了json模块 import requests headers = { & ...

最新文章

  1. MinIO分布式专题(第一章、一文教你搭建MinIO单机版)
  2. 2022 年计算机视觉的三大趋势
  3. linux运维前景与运维人员最佳职业规划录像
  4. 011_Vue自定义指令
  5. Struts2学习总结一
  6. 哨兵机制服务器环境准备
  7. c++ 二维矩阵 转vector_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
  8. MJRefresh实现刷新(使用它的Block方法)
  9. POJ 2185 Milking Grid KMP循环节周期
  10. 解决windows写Django项目在templates中的html文件中引入外部css,js不成功的方法
  11. c语言50例题答案,100个经典c语言例题(带答案).doc
  12. C语言课程设计---职工工资管理系统
  13. tx关于机器人的律师函_史陶比尔TX40机器人说明书.pdf
  14. IP地址是什么?它怎样分类?它和子网掩码的关系是什么?以太网和令牌环网分别是什么?
  15. PMI-ACP敏捷项目认证练习题(二)
  16. HDU 4372 Count the Buildings [第一类斯特林数]
  17. 体验灵魂出窍:错觉延伸人体对自身感觉
  18. 319. 灯泡开关【我亦无他唯手熟尔】
  19. 仿京东详情页商品图片查看
  20. 放假安排 自己MARK

热门文章

  1. nodejs对mongodb数据库的增删改查操作(转载)
  2. [Swift通天遁地]七、数据与安全-(12)使用Instruments Leaks工具检测内存泄露
  3. 2016.03.04,英语,《Vocabulary Builder》Unit 04
  4. java中CardLayout的使用方法
  5. KingPaper初探ThinkPHP3.1.2之目录部署(二)
  6. 在CentOS下源码安装 Xen并搭建Windows虚拟机
  7. SQL Server 兼容模式
  8. 【小技巧】【堆】【优先队列】优先队列初始化
  9. Hihocoer 1336 - Matrix Sum 二维树状数组
  10. Java学习笔记3——集合框架