Парсинг HTML

Введение

Примеры

  • 0

    Найдите текст после элемента в BeautifulSoup

    Представьте, что у вас есть следующий HTML:

     <div>
        <label>Name:</label>
        John Smith
    </div>
    
     

    И вам нужно найти текст «John Smith» после label элемента.

    В этом случае, вы можете обнаружить label элемент текста , а затем использовать .next_sibling свойства :

     from bs4 import BeautifulSoup
    
    data = """
    <div>
        <label>Name:</label>
        John Smith
    </div>
    """
    
    soup = BeautifulSoup(data, "html.parser")
    
    label = soup.find("label", text="Name:")
    print(label.next_sibling.strip())
    
     

    Печать John Smith .

  • 1

    Использование CSS-селекторов в BeautifulSoup

    BeautifulSoup имеет ограниченную поддержку CSS селекторов , но охватывает наиболее часто используемые из них. С помощью select() метод , чтобы найти множество элементов и select_one() , чтобы найти один элемент.

    Основной пример:

     from bs4 import BeautifulSoup
    
    data = """
    <ul>
        <li class="item">item1</li>
        <li class="item">item2</li>
        <li class="item">item3</li>
    </ul>
    """
    
    soup = BeautifulSoup(data, "html.parser")
    
    for item in soup.select("li.item"):
        print(item.get_text())
    
     

    Печать:

     item1
    item2
    item3
    
    
     
  • 0

    PyQuery

    pyquery - это jquery-подобная библиотека для python. Он очень хорошо поддерживает селекторы CSS.

     from pyquery import PyQuery
    
    html = """
    <h1>Sales</h1>
    <table id="table">
    <tr>
        <td>Lorem</td>
        <td>46</td>
    </tr>
    <tr>
        <td>Ipsum</td>
        <td>12</td>
    </tr>
    <tr>
        <td>Dolor</td>
        <td>27</td>
    </tr>
    <tr>
        <td>Sit</td>
        <td>90</td>
    </tr>
    </table>
    """
    
    doc = PyQuery(html)
    
    title = doc('h1').text()
    
    print title
    
    table_data = []
    
    rows = doc('#table > tr')
    for row in rows:
        name = PyQuery(row).find('td').eq(0).text()
        value = PyQuery(row).find('td').eq(1).text()
    
        print "%s\t  %s" % (name, value)  

Синтаксис

Параметры

Примечания