Как очистить тексты идентификаторов span в beautifulsoup от следующего html?

#python #python-2.7 #web-scraping #beautifulsoup

#python #python-2.7 #очистка веб-страниц #beautifulsoup

Вопрос:

 <div align="justify" style="text-align: center">
    <div>
        <table cellspacing="0" rules="all" border="1" id="ContentPlaceHolder1_grd_reminder" style="width:555px;border-collapse:collapse;">
            <tr>
                <th class="grdheading2" scope="col">Book</th>
                <th class="grdheading2" scope="col">Issue Date</th>
                <th class="grdheading2" scope="col">Submition Date</th>
            </tr>
            <tr>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label1_0">Engineering Mechanics</span>
                </td>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label2_0">17-Oct-2016</span>
                </td>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label3_0">31-Oct-2016</span>
                </td>
            </tr>
            <tr>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label1_1">ATB of Engineering Mathematics</span>
                </td>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label2_1">17-Oct-2016</span>
                </td>
                <td>
                    <span id="ContentPlaceHolder1_grd_reminder_Label3_1">31-Oct-2016</span>
                </td>
            </tr>
        </table>
    </div>
</div>
  

Я хочу извлечь текст Engineering mechanics и соответствующую ему дату (текст) 31-Oct-2016 и текст ATB of Engineering Mathematics , и соответствующую ему дату (текст) 31-Oct-2016 . Все это находится в идентификаторах span. Как я могу извлечь и распечатать их? Я новичок в веб-очистке.

Комментарии:

1.сначала вы можете использовать find_all() tr теги, а с помощью цикла вы можете find_all() td в каждом tr . Таким образом, вы можете управлять очищенными данными.

2. @furas Сэр, не могли бы вы дать мне фрагмент кода?

Ответ №1:

Сначала вы можете использовать find_all() для поиска всех tr тегов, а с помощью цикла вы можете использовать find_all() для поиска всех span тегов в каждом tr . Таким образом, вы можете управлять очищенными данными

 html = '''<div align="justify" style="text-align: center">
                                            <div>
<table cellspacing="0" rules="all" border="1" id="ContentPlaceHolder1_grd_reminder" style="width:555px;border-collapse:collapse;">
<tr>
<th class="grdheading2" scope="col">Book</th><th class="grdheading2" scope="col">Issue Date</th><th class="grdheading2" scope="col">Submition Date</th>
</tr><tr>
<td>
<span id="ContentPlaceHolder1_grd_reminder_Label1_0">Engineering Mechanics</span>
</td><td>
<span id="ContentPlaceHolder1_grd_reminder_Label2_0">17-Oct-2016</span>
</td><td>
<span id="ContentPlaceHolder1_grd_reminder_Label3_0">31-Oct-2016</span>
                                                        </td>
</tr><tr>
<td>
<span id="ContentPlaceHolder1_grd_reminder_Label1_1">ATB of Engineering Mathematics</span>
</td><td>
<span id="ContentPlaceHolder1_grd_reminder_Label2_1">17-Oct-2016</span>
</td><td>
<span id="ContentPlaceHolder1_grd_reminder_Label3_1">31-Oct-2016</span>
</td>
</tr>
</table>
</div>
</div>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, 'html.parser')

trs = soup.find_all('tr')

for tr in trs:
    spans = tr.find_all('span')
    if spans:
        print 'title:', spans[0].text
        print 'date:',  spans[2].text
  

Результат

 title: Engineering Mechanics
date: 31-Oct-2016
title: ATB of Engineering Mathematics
date: 31-Oct-2016