Python爬虫-3 BeautifulSoup基本语法

BeautifulSoup

下载:pip install bs4
导包:from bs4 import BeautifulSoup

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id="d1">
        <div id="d2">
            <span id="p1">
                我是你爸爸
            </span>
        </div>
        <ul id="u1">
            <li title="a1">王宝强</li>
            <li class="b1">贾乃亮</li>
            <li name="c1">陈羽凡</li>
            <li title="a2">蒋劲夫</li>
            <li title="a3">李阳</li>
            <a href="">百度</a>
            <div>万达</div>
        </ul>
    </div>
    <ul id="u2">
        <li id="c1">马蓉</li>
        <li id="c2">李小璐</li>
        <li>白百何</li>
        <li>蔡徐坤</li>
        <li>吴亦凡</li>
        <a href="">搜狗</a>
    </ul>
    <div id="d3" class="d4" title="d5"></div>
</body>
</html>

注意:bs4.html是我上面html文档的名字

from bs4 import BeautifulSoup

# 从网页爬到的数据
# content= requests.get(url).text
# soup = BeautifulSoup(content,'lxml')

# 这是解析html文档
soup = BeautifulSoup(open('bs4.html',encoding='utf-8'),'lxml')

# 通过soup对象调用标签的名字
# 只会返回第一个查到的a标签
# a = soup.a
# print(a)

# find
# 返回的也是第一个符合条件的标签
# a = soup.find('a')
# print(a)

# 查找li标签中titl属性为a1的
# a = soup.find('li',title='a1')
# print(a)
# a = soup.find('li',class_='b1')# 使用class属性进行查找的时候要加_,使用下面那种方式就不用
# a = soup.find('li',attrs={'class':'b1'})
# print(a)
# find方法里面有name参数,这个name比较特殊
# a = soup.find('li',name='c1')# 使用这种方式是会报错的,它会以为你是要给name这个参数赋值
# a = soup.find('li',attrs={'name':'c1'})# 可以使用这种方式
# print(a)

# find_all
#查询页面中所有的a
# a_list = soup.find_all('a')
# print(a_list)

# 查询页面中所有的a和div
# a_list = soup.find_all(['a','div'])# 要加[]
# print(a_list)

# 查询前两个li标签
# li_list = soup.find_all('li',limit=2)
# print(li_list)
# =================================================


# CSS选择器
# select 返回的也是一个列表
# a_list = soup.select('li')
# print(a_list)

# 获取li的id为c1的标签
# li_list = soup.select('#c1')
# print(li_list)

# 获取li的class为b1的标签
# li_list = soup.select('.b1')
# print(li_list)

# 获取li标签含有id的标签
# li_list = soup.select('li[id]')
# print(li_list)

# 获取 <div id="1">下所有的li标签,空格代表的是子孙节点
# li_list =soup.select('div[id="d1"] li')
# print(li_list)

# 获取<ul id="u2">下所有的li标签
# li_list = soup.select('ul[id="u1"] > li')
# print(li_list)

# 获取所有的a和div标签
# a_list = soup.select('a,div')
# print(a_list)

# 获取子孙节点
# print(soup.body.contents)# 获取body下的子孙节点

# 获取标签的内容
t = soup.select('#d1')[0]
# 标签下如果还有标签 那么使用string就获取不到数据
# 使用get_text()和text可以获取到数据
# print(t.string)
# print(t.text)
# print(t.get_text())

# 获取标签的属性值
# d = soup.select('#d3')[0]
# print(d) # <div class="d4" id="d3" title="d5"></div>
# print(d.attrs) # 获取所有属性值,以字典的形式保存 {'id': 'd3', 'class': ['d4'], 'title': 'd5'}
# print(d.attrs.get('id')) # d3

# 获取属性值的三种方法
# print(d.attrs.get('class')) # 注:class属性使用列表保存的 ['d4']
# print(d.get('title')) # d5
# print(d['class'])# ['d4']

猜你喜欢

转载自blog.csdn.net/hmh4640219/article/details/114922661
今日推荐