title: BeautifulSoup使用一
date: 2019-03-04 16:49:37
tags:
-
介绍:
前面我们已经介绍了requests的使用,接下来学习beautifulsoup的使用,这个是python的第三方库,我们在dos下执行pip install bs4来安装使用,前面我们只是返回了请求的所有内容,但是我们的目的是得到自己想要的数据内容,因此我们需要将数据进行过滤,只要有价值的内容,因此这个库便是为了过滤使用的。
-
使用
import requests from bs4 import BeautifulSoup data="""<div class="subnav"> <ul class="navbar"> <li> <a data-act="subnav-click" data-val="{subnavClick:7}" href="/board/7" >热映口碑榜</a> </li> <li> <a data-act="subnav-click" data-val="{subnavClick:6}" href="/board/6" >最受期待榜</a> </li> <li> <a data-act="subnav-click" data-val="{subnavClick:1}" data-state-val="{subnavId:1}" class="active" href="javascript:void(0);" >国内票房榜</a> </li> <li> <a data-act="subnav-click" data-val="{subnavClick:2}" href="/board/2" >北美票房榜</a> </li> <li> <a data-act="subnav-click" data-val="{subnavClick:4}" href="/board/4" >TOP100榜</a> </li> </ul> </div> """ print(type(data)) data=BeautifulSoup(data,'html.parser') print(type(data)) print(type(data.div.ul.li.a)) print(data.div.ul.li.a) print(data.div.ul.li.a.string) print(data.div.ul.li.a.name) print(data.div.ul.li.a.attrs)
=============== RESTART: C:\Users\Administrator\Desktop\aaa.py =============== <class 'str'> <class 'bs4.BeautifulSoup'> <class 'bs4.element.Tag'> <a data-act="subnav-click" data-val="{subnavClick:7}" href="/board/7">热映口碑榜</a> 热映口碑榜 a {'data-act': 'subnav-click', 'data-val': '{subnavClick:7}', 'href': '/board/7'} >>>
我们可以看到输出的结果,我将解释每句代码的含义
-
print(type(data))
<class 'str'>
初始时data是字符串类型
-
data=BeautifulSoup(data,'html.parser') print(type(data))
<class 'bs4.BeautifulSoup'>
表示完成了beautifulsoup对象的初始化,其中的Beatifulsoup()有两个参数,一个是data一定要是字符串类型,还有便是html.parser这个表示使用的解析器,这个是python自带的一个解析器,通常使用的还有lxml等,在使用lxml时需要导入lxml模块,在dos下使用pip install lxml。
-
print(type(data.div.ul.li.a))
<class 'bs4.element.Tag'>
这个表示beautifulsoup的节点选择器,可以看到节点选择是可以嵌套的,并且返回的类型是bs4.element.Tag类型。
-
print(data.div.ul.li.a)
<a data-act="subnav-click" data-val="{subnavClick:7}" href="/board/7">热映口碑榜</a>
可以看到输出的结果是整个标签
-
print(data.div.ul.li.a.string)
热映口碑榜
bs.element.Tag类型的对象有string属性,返回的是标签里面的内容
-
print(data.div.ul.li.a.name)
a
bs.element.Tag类型的对象有name属性,返回的是标签的名字
-
print(data.div.ul.li.a.attrs)
{'data-act': 'subnav-click', 'data-val': '{subnavClick:7}', 'href': '/board/7'}
bs.element.Tag类型的对象有attrs属性,返回的是标签的属性,可以看到返回的是一个字典。
-
print(data.div.ul.li.a.attrs['data-act'])
subnav-click
可以看到我们可以使用键来访问属性的值
print(data.div.ul.li.a['data-act'])
subnav-click
返回的仍然是建的值,因此这两种方法都可以访问属性的值,但如果没有data-act这个建便会报错
print(data.div.ul.li.a['datact'])
=============== RESTART: C:\Users\Administrator\Desktop\aaa.py =============== <class 'str'> <class 'bs4.BeautifulSoup'> <class 'bs4.element.Tag'> <a data-act="subnav-click" data-val="{subnavClick:7}" href="/board/7">热映口碑榜</a> 热映口碑榜 a Traceback (most recent call last): File "C:\Users\Administrator\Desktop\aaa.py", line 41, in <module> print(data.div.ul.li.a['datact']) File "D:\studyapp\python\lib\site-packages\bs4\element.py", line 1016, in __getitem__ return self.attrs[key] KeyError: 'datact' >>>
-
还有便是data.prettify()函数的使用,这个的作用便是将原来没有顺序的字符串按照一定的格式输出。
import requests from bs4 import BeautifulSoup data="""<p><p>hello</p></p> """ data=BeautifulSoup(data,'html.parser') print(data.prettify())
=============== RESTART: C:\Users\Administrator\Desktop\aaa.py =============== <p> <p> hello </p> </p> >>>
-