爬虫-bs4

一、作用

  • bs4就是通过HTML标 签和属性去定位⻚⾯上的内容的
  • bs4模块安装
ip install bs4
ip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs

二、使用

  准备一个HTML文件

<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Title</title>
    </head>
    <body>
        <div class="url">
            <ul>
                <li><a href="http://www.baidu.com">百度</a></li>
                <li><a href="http://www.google.com">谷歌</a></li>
                <li><a href="http://www.sogou.com">搜狗</a></li>
            </ul>
            <ol>
                <li><a href="feiji">飞机</a></li>
                <li><a href="dapao">大炮</a></li>
                <li><a href="huoche">火车</a></li>
            </ol>
        </div>
        <div class="job">李嘉诚</div>
        <div class="common">胡辣汤</div>
    </body>
</html>
from bs4 import BeautifulSoup            # 使用前先导入
file = open('b.html', encoding='utf-8') soup = BeautifulSoup(file,'lxml') # 将本地的html文档中的数据加载到该对象中 print(soup) # 返回全部内容
  • 获取标签信息
    print(soup.ul)       #返回ul内容
    print(soup.div)      #等同于   print(soup.find('div'))

    #具体定位到某一个div,可根据属性定位
    print(soup.find('div',class_='common'))   #<div class="common">胡辣汤</div>

    # 属性定位
    soup.findAll('tagName') #返回soup中符合要求的所有标签
    a_list = soup.findAll('a') #返回的是一个列表
    for a in a_list:
        print(a)
    print(soup.findAll('a')[1]) #定位第2个a标签的内容
    # <a href="http://www.google.com">谷歌</a>
  • 选择器select
   # -select('某种选择器(id,class ,标签。。。选择器)’)
    print(soup.select('.common'))  #返回login下的所有标签    :[<div class="common">胡辣汤</div>]
    print(soup.select('div')[1])  #返回一个列表             :<div class="job">李嘉诚</div>
  • 层级选择器
#一个 > 表示一个层级 :获取a标签下的第一个href
print(soup.select('.url > ul > li > a')[0]['href'])
 # http://www.baidu.com
#一个 > 表示一个层级 :获取所有a标签
print(soup.select('.url > ol > li > a ')) #[<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>]

  另外层级之间除了用>来表示上下层关系,还可以用空格表示多个层级;

 

 # soup.select('.tag > ul a')  #空格表示多个层级 ,注意别忘了前面的.

 print(soup.select('.url ul a'))
#[<a href="http://www.baidu.com">百度</a>, <a #href="http://www.google.com">谷歌</a>, <a #href="http://www.sogou.com">搜狗</a>]

 print(soup.select('.url ol li a'))
#[<a href="feiji">飞机</a>, <a href="dapao">大炮</a>, <a href="huoche">火车</a>]

 

  • 获取标签之间的文本, 方法有:
    • soup.a.text
    • string
    • get_text()

 

print(soup.find('div',class_= 'url').text)   #可以获取某一个标签中所有内容     返回的是一个str

"""
百度
谷歌
搜狗
飞机
大炮
火车
"""
print(soup.find('div',class_= 'job').string)  #李嘉诚

 如果想要获取ul > li > a中的某一个值

# 获取标签中属性值   
# soup.a['href']      #测试下只返回第一个值,
# print(soup.a['href'])  #http://www.baidu.com

print(soup.
select('.url > ul > li > a')[1]['href']) #可以通过【】变量来获取不同链接 #http://www.google.com
print(soup.select('.url > ul > li > a')[2].text)    #获取中间的值
# 搜狗

三、

 
 
posted @ 2023-12-10 14:42  zhang0513  阅读(2)  评论(0编辑  收藏  举报