第三章 数据解析(十一) 2019-12-21

十一、 bs4 – select方法


搜索文档树:

有时候使用css选择器的方式可以更加方便。使用css选择器的语法,应该使用select方法。以下列出几种常用的css选择器方法:


2、select方法:

使用以上方法可以方便找出元素。但有时候使用css选择器的方式可以更加方便。使用css选择器的语法,应该使用select方法。以下列出几种常用css选择器方法:


(1)通过标签名查找:

print(soup.select(‘a’))

 

(2)通过类名查找:

通过类名,则应该在类前面加一个.,比如要差找class=sister的标签,示例代码如下:

print(soup.select(‘.sister’))

 

(3)通过id查找:

通过id查找,应该在id的名字前面加一个#号。示例代码如下:

print(soup.select(“#link1”))

 

(4)组合查找:

组合查找即和写class文件时,标签名与类名、id名进行的组合原理是一样的,例如查找p标签中,id等于link1的内容,二者需要用空格分开:

print(soup.select(“p #link1”))

直接子标签查找,则使用>分隔:

print(soup.select(“head>title”))

 

(5)通过属性查找:

查找是还可以加入属性元素,属性需要用中括号括起来,注意属性和标签属性同一节点,所以中间不能加空格,否则会无法匹配到。示例代码如下:

print(soup.select(‘a[href=”http://example.com/elsie”]’))

 

(6)获取内容:

以上的select方法返回的结果都是列表形式,可以遍历输出,然后用get_text()方法来获取它的内容。

soup = BeautifulSoup(html, ‘lxml’)

print(type(soup.select(‘title’)))

print(soup.select(‘title’)[0].get_text())

for title in soup.select(‘title’):

print(title.get_text())

 

示例代码:


from bs4 import BeautifulSoup

html = """

<html><head><title>The Dormouse's story</title></head>

<p class = "title"><b>The Dormouse's story</b></p>

<p class = "story">Once upon a time there were three little sisters; and their names were

<a href = "http://example.com/elsie" class = "sister" id = "link1">Elsie</a>,

<a href = "http://example.com/lacie" class = "sister" id = "link2">Lacie</a> and

<a href = "http://example.com/tillie" class = "sister" id = "link3">Tillie</a>;

and they lived at the bottom of a well.</p>

<p class = "story">...</p>

"""

soup = BeautifulSoup(html, 'lxml')

 

# (1)通过标签名查找:

# print(soup.select('a'))

 

# (2)通过类名查找:

# print(soup.select('.sister'))

 

# (3)通过id查找:

# print(soup.select('#link1'))   

 # 通过css选择器语法查找


# (4)组合查找:

# 方法1

# print(soup.select('p #link1'))

# 方法2

# print(soup.select('head> title'))

 

# (5)通过属性查找:

# print(soup.select('a[href="http://example.com/elsie"]'))

 

# (6)获取内容:

# print(soup.select('title')[0].get_text())

# select输出的是列表,get无法直接获取,所以要加下标来取值,只有一个内容所以用【0】


练习题


from bs4 import BeautifulSoup

html = """

<table class - "tablelist"cellpadding" = 0"cellspacing = "0">

    <tbody>

        <tr class = "h">

            <td class = "1"width = "374">职位名称</td>

            <td>职位类别</td>

            <td>人数</td>

            <td>地点</td>

            <td>发布时间</td>

        </tr>

        <tr class = "even">

            <td class = "1 square"><a target = "_blank"href = "position_detail.php?id=33824&keywords=python">

            <td>技术类</td>

            <td>1</td>

            <td>深圳</td>

            <td>2017-11-25</td>

        </tr>

        <tr class = "odd">

            <td class = "1 square"><a target = "_blank"href = "position_detail.php?id=29938&keywords=python">

            <td>技术类</td>

            <td>1</td>

            <td>深圳</td>

            <td>2017-11-25</td>

        </tr>

        <tr class = "even">

            <td class = "1 square"><a target = "_blank"href = "position_detail.php?id=33824&keywords=python">

            <td>技术类</td>

            <td>1</td>

            <td>深圳</td>

            <td>2017-11-24</td>

        </tr>

        <tr class = "odd">

            <td class = "1 square"><a target = "_blank"href = "position_detail.php?id=29938&keywords=python">

            <td>技术类</td>

            <td>1</td>

            <td>深圳</td>

            <td>2017-11-24</td>

        </tr>

    </tbody>

</table>

"""

 

soup = BeautifulSoup(html, 'lxml')

 

# 1、获取所有st标签

# trs = soup.select('tr')

# print(trs)

 

# 2、获取第二个tr标签

# tr = soup.select('tr')[1]

# print(tr)

 

# 3、获取所有class等于even的tr标签

# tr = soup.select('.even')

# print('tr')

# 上面的方法找到的不一定是tr标签

# tr = soup.select('tr[class="even"]')

# print(tr)

 

# 4、获取所有a标签的href属性

# alist = soup.select('a')

# for a in alist:

#    href = a['href']

#    print(href)

 

# 5、获取所有职位信息(纯文本)

trs = soup.select('tr')

for tr in trs:

    info = list(tr.stripped_strings)

    print(info)



上一篇文章 第三章 数据解析(十) 2019-12-20 地址: 

https://www.jianshu.com/p/a06d8e8b0393

下一篇文章 第三章 数据解析(十二) 2019-12-22 地址:

https://www.jianshu.com/p/a70e17e2e7c9



以上资料内容来源网络,仅供学习交流,侵删请私信我,谢谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。