使用BeautifulSoup解析html_基于python

Beautiful Soup是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据。

  1. <a>I love you</a> <a>----</a>是一个tag或者标签或者节点,a是tag_name或者标签名或者节点名

  2. 方法选择器 find_all()find():
    find_all() 返回所有匹配的节点组成的列表;find() 返回匹配的第一个节点,非列表。

  3. 具体介绍

html_example:

<div>
        <div>
            <h4>Hello</h4>
        </div>
        <div>
            <ul id="list-1">
                <li>Foo</li>
                <li>Bar</li>
                <li>Jay</li>
            </ul>
        </div>
</div>

解读:

<ul id="list-1">------</ul> 节点/父节点, class属性的值是["list"], id属性的值是list-1
<li>Foo</li> 内部节点/子节点, class属性的值是["element"], Foo是该节点的text
<li>Bar</li> 内部节点/兄弟节点, class属性的值是["element"], Bar是该节点的text
ul和li:节点名


from bs4 import BeautifulSoup
soup = BeautifulSoup(html_example, 'lxml')
print(soup.li.string)
print(soup.li["class"])
print(soup.ul["class"])
运行结果:
Foo  # 获取第一个li节点的text
["element"]  # 获取第一个li节点的class属性的值
["list"]  # 获取第一个ul节点的class属性的值


find_all() 和 find() 可以传入name(节点名)、id、class、attrs参数
soup.find_all(name='ul')  # 返回一整个大节点,列表只有一个元素
soup.find_all(id='list-1')  # 返回一整个大节点,列表只有一个元素
soup.find_all(class_='element')  # 返回三个内部节点,列表有三个元素;由于class在Python里是一个关键字,所以后面需要加一个下划线
soup.find_all(attrs={'id': 'list-1'})  # 返回一整个大节点,列表只有一个元素

print(soup.find_all(name='ul'))
运行结果:
<ul id="list-1">
        <li>Foo</li>
        <li>Bar</li>
        <li>Jay</li>
</ul>

print(type(soup.find_all(class_='element')[0]))
运行结果:
class 'bs4.element.Tag'  # 节点类型


attrs的返回结果是字典形式
print(soup.ul.attrs)
运行结果:
{'class': ['list'], 'id': 'list-1'}  # 一个节点元素可能有多个class,所以返回的是列表
  1. css选择器 select()
    select('a b') 选择包含a的节点下包含b的节点,即选择包含b的节点,返回节点列表
    select('a') 选择包含a的节点
    a、b应为tag_name,例如ul、li

  2. 可以使用lxml解析库和html.parser解析库
    不同解析库返回的结果貌似是不同的,html.parser解析库返回结果更完整。
    两者都是bs4模块自带的

  3. Beautifulsoup 语法

 import requests
 from bs4 import BeautifulSoup
 
 url = 'https://gs.caas.cn/xwzx/xwrd/382a73ce9a474836976650d14be58d38.htm'
 response = requests.get(url)
 
 # 使用BeautifulSoup解析页面内容
 soup = BeautifulSoup(response.text, 'html.parser')  # 使用response.text来获取服务器响应内容的文本形式,和3中的html文本是等同的
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值