Извлечение текста ячейки таблицы HTML из Beautifulsoup - PullRequest
0 голосов
/ 12 ноября 2019

Я хочу извлечь «Канада», которая основана на тексте «Место рождения». Как это можно сделать с beautifulsoup?

<html>
    <table class="table1">
        <tbody>
            <tr>
                <td>Date(s) of Birth Used</td>
                <td>May 14, 1942</td>
            </tr>
            <tr>
                <td>Place of Birth</td>
                <td>Canada</td>
            </tr>
        </tbody>
    </table>
</html>

Ответы [ 2 ]

2 голосов
/ 12 ноября 2019

Вы должны попробовать это для динамического значения td .

from bs4 import BeautifulSoup

contents = '''<html>
                <table class="table1">
                    <tbody>
                        <tr>
                            <td>Date(s) of Birth Used</td>
                            <td>May 14, 1942</td>
                        </tr>
                        <tr>
                            <td>Place of Birth</td>
                            <td>Canada</td>
                        </tr>
                    </tbody>
                </table>
            </html>'''

soup = BeautifulSoup(contents, 'html.parser')
table_div = soup.find(class_ = "table1")
td_val = table_div.findAll('td')
updated_td_val = list(map(str, td_val))

# You can use input() instead of '<td>Place of Birth</td>' to take dynamic input and on basis of that input, it will return you the content of input td and it's next td.

if updated_td_val and '<td>Place of Birth</td>' in updated_td_val:
    index_val = updated_td_val.index('<td>Place of Birth</td>')
    print(td_val[index_val].get_text())
    print(td_val[index_val+1].get_text())

ВЫХОД:

Place of Birth
Canada
0 голосов
/ 14 ноября 2019

По моему мнению, легче читать с использованием синтаксиса bs4 4.7.1+ и использовать: содержит, чтобы сопоставить на узле td с целевым текстом затем соседний братский комбинатор , чтобы получить следующий td

from bs4 import BeautifulSoup as bs

html = '''
<html>
    <table class="table1">
        <tbody>
            <tr>
                <td>Date(s) of Birth Used</td>
                <td>May 14, 1942</td>
            </tr>
            <tr>
                <td>Place of Birth</td>
                <td>Canada</td>
            </tr>
        </tbody>
    </table>
</html>
'''
soup = bs(html, 'lxml')
print(soup.select_one('td:contains("Place of Birth") + td').text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...