美文网首页Python
Python基础(47) - Beautiful Soup节点选

Python基础(47) - Beautiful Soup节点选

作者: xianling_he | 来源:发表于2020-03-17 22:19 被阅读0次

如何使用Beautiful Soup的节点选择器获取节点信息

HTML代码如下:

html = '''
<html>
<head>
    <title>获取节点信息</title>
</head>
<body>
<div>
    <ul>
        <li class="item1" value1="1234" value2 = "hello world"><a href ="https://geekori.com">geekori.com</a></li>
        <li class="item"><a href="href="https://www.jd.com">京东商城</a></li>
    </ul>
        <li class="item3"><a href="href="https://www.taobao.com">淘宝</a></li>
        <li class="item"><a href="href="https://www.microsoft.com">微软</a></li>
        <li class="item"><a href="href="https://www.google.com">谷歌</a></li>
    </ul>
</div>
</body>
'''
  • 安装beafutifulsoup4,现在都是python3版本,所以直接安装bs4
pip3 install beafutifulsoup4
hexianling.png
  • 在Pycharm中间导入,导入进工程才能正常引用


    hexianling.png
  • 导入beafutifulsoup4包文件,同时需要安装bs4
from bs4 import BeautifulSoup

如果遇到以下error信息

hexianling.png

解决方法:

  • 安装好lxml,这个容量大概3.7M,可能需要一点时间。如果失败可以尝试多几次
pip3 install lxml
hexianling.png hexianling.png

查看节点信息

soup = BeautifulSoup(html,'lxml')
print(soup.title.name) #获取title的节点名字
print(soup.title.text) # 获取title name
hexianling.png

获取第一个li的属性值

  • 由于获取attrs的时候,都是按照顺序取值的,从一个开始取值
print(soup.li.attrs)
hexianling.png

获取某个特定属性值

  • 获取value2这个的属性值
print(soup.li.attrs['value2'])
hexianling.png

获取链接的属性值

print(soup.a['href'])
print(soup.a.string)
print(soup.a.text)
hexianling.png

讲解

1.节点选择器可以想使用对象属性一样获取节点信息,如soup.title.name用于获取title节点的名字。

如何使用CSS选择器获取节点信息

HTML代码

html = '''
<html>
<head>
    <title>获取节点信息</title>
</head>
<body>
<div>
    <ul>
        <li class="item1" value1="1234" value2 = "hello world"><a href ="https://geekori.com">geekori.com</a></li>
        <li class="item"><a href="href="https://www.jd.com">京东商城</a></li>
    </ul>
        <li id = "myTest" class="item3"><a href="href="https://www.taobao.com">淘宝</a></li>
        <li class="item"><a href="href="https://www.microsoft.com">微软</a></li>
        <li class="item"><a href="href="https://www.google.com">谷歌</a></li>
    </ul>
</div>
</body>
'''

使用CSS选择器

soup = BeautifulSoup(html,'lxml')
tags = soup.select('.item')  #.select 就是选择 CSS选择器的方法
print(type(tags))

获取所有的CSS节点信息

soup = BeautifulSoup(html,'lxml')
tags = soup.select('.item')
print(type(tags))
for tag in tags:
    print(tag)
hexianling.png

获取特定属性值的节点

  • 获取id = myTest的节点信息
  • 获取节点的方法是使用#
print('-'*10)
print(soup.select('#myTest'))
hexianling.png

获取出所有相关节点信息,比如所有link

print('-'*10)
print(soup.select('a'))
hexianling.png

获取所有相关节点中的特定值

  • 找到所有的link
  • 获取所有link下面的href值
Links = soup.select('a')
for link in Links:
    print(link)
    print(link['href'])
hexianling.png

记录

  1. CSS选择器可以获取所有的相关节点信息
  2. 节点选择值只能获取满足条件的节点信息

相关文章

网友评论

    本文标题:Python基础(47) - Beautiful Soup节点选

    本文链接:https://www.haomeiwen.com/subject/qkntyhtx.html