美文网首页
python BeautifualSoup使用

python BeautifualSoup使用

作者: new和光同尘 | 来源:发表于2020-11-25 18:38 被阅读0次

    爬虫过程中解析html 获取关注信息,常用的方法有正则匹配re、xpath、BeautifualSoup,
    re 正则,规则每次用都需要查(我比较
    xpath,运行比较快
    BeautifualSoup,简单粗暴,我喜欢
    以下是我的理解,之说我用到的方法,不全面但使用

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(response.text, 'html.parser')
    

    response.text 是获取到的html文本信息
    html.parse 是 使用python 内置的html解析器, 第二个参数也可以写成 'lxml' 用lxml解析器解析, (可以理解为html是特殊的xml)

    上例子:
    https://www.dxsbb.com/news/44368.html

    1. prettify()

    要拿到上述连接中 大学排名的顺序信息,直接网页右键 查看网页源代码,格式非常的乱,不好找规律,这个时候可以用到一个方法格式化网页的源码输出,对比一下两个的效果:

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(response.text, 'html.parser')
    print(soup.prettify())
    

    2. 定位元素信息 find()、find_all()、select()

    find() 是查找到第一个匹配的元素,模糊匹配
    find_all() 是查找全部匹配的元素 返回一个soup列表,模糊匹配
    select() 与find类似 是精准匹配
    上例子:
    上述连接中没有找到可用的例子,所以网上找了一个图 ,小图一上,清晰明了

    soup.find(name='td',class_='bar')  # 实际定位到的
    soup.select('td[class="bar"]')  # 查找的
    

    根据上述格式化之后的html、找到表格中数据规则 每一行开始都是 <tr class="alt">,里边包裹的是<td>中是真实的值,找到规则之后可以如下方式获取

    soup = BeautifulSoup(response.text, 'html.parser')
            listTemp = []   # 将所有信息存储在列表中
            trTag = soup.find_all(name='tr', class_='alt') # 找到每一行的信息,返回一个列表
            for tr in trTag:
                subTemp = [] # 将一行信息中的每个值,保存在列表中
                for tdTag in tr.find_all('td'):  # 一行信息有多个 td,一个td包裹一个值
                    subTemp.append(tdTag.text)  # tag.text 获取内容,
                listTemp.append(subTemp)  # 将一行的信息存入总的列表中
    
            for i in listTemp:  # 打印 所有的值
                print(i)
    

    3. 另外几个常用的方法

    3.1 打印获取到的特定一块html区域

    soup = BeautifulSoup(response.text, 'html.parser')
            trTag = soup.find_all(name='tr', class_='alt')  
            print(trTag[0].prettify())  # 打印第一个tr标签中的html文本
    
    <tr class="alt">
     <td>
      1
     </td>
     <td>
      <div>
       清华大学
      </div>
     </td>
     <td>
      <div>
       北京
      </div>
     </td>
     <td>
      <div>
       综合
      </div>
     </td>
     <td>
      <div>
       852.5
      </div>
     </td>
    </tr>
    

    3.2 获取标签的属性

    soup.a.attrs 获取a所有的属性和属性值,返回一个字典
    soup.a.attrs['href'] 获取href属性, 可以简写成soup.a['href]

    3.3 获取标签的内容

    soup.a.string ,获取质数内容, 比如 <a href ="xxxx"> a标签的直属内容</a>
    soup.a.text ,获取所有内容, 比如 <a href ="xxxx"> <h1>非a标签的直属内容</h1></a>, 这就可以解释上述例子中,为啥没有考虑<div>这个标签了

    相关文章

      网友评论

          本文标题:python BeautifualSoup使用

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