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

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

fd20e94e357dfb77a3efa3f39ac49848.png

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

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

2、将html转换成pdf(wkhtmltopdf)

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

开始使用

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

如下所示:

3f391f78d57eaffd1268b093b5ad9b1c.png

首先,文档被转换成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')

自定义设置

ff0f10870de2dd5f36f11fe91107adc1.png

使用代理ip

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

5678c140f270ea245e427a388803e0fa.png

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

运行结果

运行过程截图:

8a9572145b210a6b47bd25369ea73a9c.png

运行过程

生成的效果图:

237ff4cee80e2523f024447a19980cb2.png

效果图

代码如下:

1234af75ea9ddba6db6f1a9ed23f7093.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LSGO软件技术团队2015~2016学年第八周(1019~1025)总结

LSGO软件技术团队成立于2010年10月,主要从事的应用方向为互联网与移动互联网(UI设计,前端开发,后台开发),地理信息系统;研究方向为数据分析与计算机视觉。成立几年来为学校培养了一批优秀学生&a…

ENVI计算公式(一)

<1>大于1的值赋予1&#xff0c;小于0的值赋予0 ((b1 lt 0)*(0)(b1 ge 0)*b1)or((b1 gt 1)*(1)(b1 ge 0)*b1) <2>modis数据计算ndvi b1*0.0001 <3>modis数据计算地表温度&#xff08;单位&#xff1a;摄氏度&#xff09; b1*0.02-273.15 <4>modis数据…

list取数据_Day.5利用Pandas做数据处理(二)

数据合并使用Join()合并&#xff0c;合并的方式是根据行和行进行合并。# 使用join合并&#xff0c;着重关注的是 行的合并import pandas as pd df1pd.DataFrame({Red:[1,3,5],Green:[5,0,3]},indexlist(abc))df2pd.DataFrame({Blue:[1,9,8],Yellow:[6,6,7]},indexlist(cde))pri…

MRP的数据处理-华北水利水电大学(作业)

这是之前学经济方向的同学让我利用C语言写的关于MRP的数据处理的过程&#xff0c;在用C语言写的过程中利用了动态数组使得时区不仅限于这8时区&#xff0c;有相关的同学可以进行查看 代码运行结果如下&#xff08;该代码可以自动调整参数&#xff0c;时区可以设置8天以上&#…

LSGO软件技术团队2015~2016学年第九周(1026~1101)总结

简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校培养…

git 每次都要输入用户名密码_Git向GitHub提供代码

一.前期准备工作首先建立一个GitHub账号&#xff0c;这个账号和密码邮箱要记住&#xff0c;如果忘记了也可以找回&#xff0c;会麻烦一些。在官网下载一个Git,可以自己根据默认进行安装&#xff0c;这样也是没有问题的&#xff0c;如果系统盘的空间不够大&#xff0c;可以安装到…

C# Socket 入门5 UPD 结构体 与 C++ 通信

1. 同样&#xff0c; 我们先看看这一个比简单的 结构体 代码 usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceCSharp_Socket_5{ ///<summary>///通信消息格式 ///</summary>[Serializable] …

坐标点获取并显示

在工作当中经常遇到根据名称获得相应坐标的情况,我们可以利用百度地图api来获取对应地点的坐标。 例如: 目前我们手中有需要获取大学坐标的名称,想要获取其坐标,并将其进行可视化显示。 以下是要查询的大学名称(现实当中可以是几千条数据) 以下是我们查询的结果 …

LSGO软件技术团队2015~2016学年第十周(1102~1108)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为数据分析与计算机视觉。成立几年来为学校…

matlab中GUI的属性检查器中的XLimMode是什么_如何在Matlab中使用GUI做一个简易音乐播放器? ---- (二)GUIDE...

咕咕怪由于昨天有重要的事情所以咕了一天的文章 &#xff08;感觉写得挺基础的&#xff0c;对各个部分有一定了解的童鞋可以直接跳过了解的部分用Matlab做一个app有几种办法呢&#xff1f;同样的&#xff0c;帮助文档告诉了我们答案&#xff1a;三种。英语好的童鞋看完这张图应…

DDMMSS.SS转为DD

有时候甲方会给我们一些坐标&#xff0c;但是在arcgis中是无法直接显示的 这是因为该格式是DDMMSS.SS的格式&#xff0c;而arcgis支持的是DD格式的&#xff0c;其中dd单位是度&#xff0c;mm单位是分&#xff0c;ss.ss单位是秒 所以要在arcgis中显示我们需要将其转换为DD的格式…

LSGO软件技术团队2015~2016学年第十一周(1109~1115)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…

maven springboot 除去指定的jar包_SpringBoot的运行机制

SpringBoot打包机制先看一眼spring-boot的maven插件打包后的target目录&#xff1a;其中有一个.jar.original的文件&#xff0c;一个.jar文件&#xff0c;其中.jar.original才是原始的jar包&#xff0c;而.jar文件是经过spring-boot的maven插件处理过后的jar&#xff0c;spring…

TVDI计算流程

TVDI计算过程 下载数据的网站: https://ladsweb.modaps.eosdis.nasa.gov/search/ 所需数据modis的16天的ndvi数据(MOD13A2)和每8天的LST数据(MOD11A2) 北半球选择Terra,南半前选择Aqua,因为两个卫星旋转是相对的,太阳高度角不同,会有些许误差 利用modis处理工具(MRT)…

LSGO软件技术团队2015~2016学年第十二周(1116~1122)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…

python append函数_让你python代码更快的3个小技巧!速度提高了一倍还多

大家好&#xff01;今天呢&#xff0c;我们来聊一聊如何加速你的 python 代码。Python 语言的优点可以列举出许多&#xff0c;语法简单易懂、模块丰富、应用广泛等等。但是世界上没有有完美的东西&#xff0c;python 一个明显缺点就是运行速度慢&#xff0c;至少跟 C 语言没法比…

栅格计算面积

1.进行栅格重分类 2.重分类 3.打开属性&#xff0c;查看像元大小 4.打开属性表 5.添加字段 6.打开字段计算器 7.计算结果如下&#xff08;单位一般为平方米&#xff09;

autotools使用

Makefile固然可以帮助make完成它的使命&#xff0c;但要承认的是&#xff0c;编写Makefile确实不是一件轻松的事&#xff0c;尤其对于一个较大的项目而言更是如此。那么&#xff0c;有没有一种轻松的手段生成Makefile而同时又能让我们享受make的优越性呢&#xff1f;本节要讲au…

LSGO软件技术团队2015~2016学年第十三周(1123~1129)总结

团队简述&#xff1a; LSGO软件技术团队成立于2010年10月&#xff0c;主要从事的应用方向为互联网与移动互联网&#xff08;UI设计&#xff0c;前端开发&#xff0c;后台开发&#xff09;&#xff0c;地理信息系统&#xff1b;研究方向为大数据处理与机器学习。成立几年来为学校…

[转]揭开正则表达式的神秘面纱

揭开正则表达式的神秘面纱关闭高亮[原创文章&#xff0c;转载请保留或注明出处&#xff1a;http://www.regexlab.com/zh/regref.htm]引言正则表达式&#xff08;regular expression&#xff09;就是用一个“字符串”来描述一个特征&#xff0c;然后去验证另一个“字符串”是否符…