首先是安装BS4库
因为Python的pip真的很方便,所以一般不出意外,只需要一个pip就足以完成一个库的安装。
pip install beautifulsoup4
名字很长不要记错名字呦。
想要利用爬虫获得我们想要的内容,就一定要学会一个解析HTML的库。
我们总不能用正则表达式,匹配出我们需要的内容,那任务量一定是巨大的,繁琐的,很少有人去那么做,除非你就是需要这个网页中特定的元素。
怎么使用BS4库?
Bs4库和有些库还有一些不同,像我们学习爬虫一定要学习的requests库,我们只需要安装好之后引入就可以。
import requests
但是Bs4库还有一些不同,虽然我们是安装的beaifulsoup4,但是引用的时候要这样引用:
from bs4 import BeuautifulSoup
学习使用BeautifulSoup
BeautifulSoup就是用来解析HTML源代码,然后方便我们拿到想要的内容。
BeautifulSoup有四种解析方式,我们只讲一种,因为其他三种解析方式,要么需要额外安装,要么就是慢,所以我们选择适中稳定,方便的html.parser。
抓取标签
我只讲解一些常用到的获取标签的方式。
首先贴上一个HTML示例。
我的第一个BeautifulSoup使用
这是一个通过class抓取到的内容
这是一个通过id抓取到的消息
这是一个通过标签名抓取到的消息
接下来我们就对这个html内容进行解析。
首先先对html进行解析(也可以理解为,将html代码转换为BeautifulSoup可以操作的类型)
我们先用一个变量来保存这个html源码
Html = """
我的第一个BeautifulSoup使用
这是一个通过class抓取到的内容
这是一个通过id抓取到的消息
这是一个通过标签名抓取到的消息
标签内容
"""
这个变量保存html源码之后我们就要来解析这段源码
Soup = BeautifulSoup(Html, "html.parser")
这里需要两个参数,第一个Html就是我们刚才在变量中存储的html源码,这个参数必须是str类型,第二个参数是解析的方式,我们只使用html.parser所以这个参数就是死的,不会改变的,记住就可以了。
当我们获得BeautifulSoup的返回值,也就是我们现在这个Soup,我们想要获得HTML的某个内容就是使用这个Soup变量,//Soup是一个BS4中的一个类,这个就不提了。
怎么去找到某个元素的标签
BeautifulSoup提供了很多的查找方式,我们在这里只讲几个常用的查找方式。
第一种查找方式
示例比如说我们要查询"这是一个通过class抓取到的内容"这一段内容的话可以使用:
print(Soup.body.p.string)
因为Soup是代表整个html,所以在Soup下的body标签中的第一个p标签的string,string就是标签的内容,就会获得"这是一个通过class抓取到的内容"这个内容,这是一种根据标签的上下级关系来查找的,并不是很常用。
什么时候有用呢?
比如说我们要获得一个html的title元素。
print(Soup.title.string)
就会输出title的内容。
在这种情况下使用就会很方便
第二种查找方式
find和find_all
find查找只能查找符合条件的一个标签。
find_all可以查找符合条件的所有标签。
根据标签中的class要查找标签
例如说根据class查找
查找我们html源码中唯一一个拥有class的标签
ClassTag = Soup.find(class_="classtext")
这个参数class_是因为python中有类,类的关键字是class,所以用了class_代替了class。
find查找到class等于"classtext"的标签,如果我们想获得ClassTag的内容
print(ClassTag.string)
就可以输出ClassTag的内容,.string对任何标签都适用。
也可以获取标签的属性
比如说输出标签的class属性
print(ClassTag["class"])
获得标签的任意属性都是使用这种方式,Tag["xxx"]获得Tag的xxx属性。
根据标签内容查找
Soup.find("p", text="标签内容")
通常find和find_all的第一个参数是字符串类型的时候,就是想要查找的标签名,例如这一段代码,就是要查找p标签,查找某个p标签text的内容是"标签内容"的标签。如果没有找到就会返回None。
一般我们只会用到id内容查询和class内容查询。
接下来我们示例查找那个id等于"idtext"的p标签。
Soup.find("p", id="idtext")
获得id="text"的标签。
第三种查找方式
这种查找方式是一种全能的方式,可以搜索任意元素的标签。
是使用attrs参数
示例
Soup.find("p", attrs={"id":"idtext"})
根据字典键值对来查询标签,attrs就是标签属性名对应属性内容来查找。这里符合条件的标签必须符合id="idtext"这个条件。
attrs={"class":"classtext"}
这里查找到的标签,必须符合class="classtext"条件。
find和find_all的区别
find查找到的标签,就算有很多标签都符合条件,也只会查找到第一条。
find_all查找到的标签,是所以符合条件的所有标签。
刘傲天 Qq:1151172004
虽然不会有人转载但还是声明,转载声明出处,并发邮箱提醒本人,[email protected]
如有错误还请联系
转发QQ:1539747235
邮箱:[email protected]
本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://www.allsrc.cn/requests/BeautifulSoup.html (转载时请注明本文出处及文章链接)
原文地址:https://www.cnblogs.com/wlke/p/8460351.html