невозможно получить текст из тега SPAN - PullRequest
2 голосов
/ 14 апреля 2019

Структура сайта, который я пытаюсь разобрать, выглядит следующим образом:

<table border="0" cellpadding="3" cellspacing="0" width="100%">
    <tr height="25">
        <td class="th" style="border:none" width="2%"> </td>
        <td class="th">movie</td>
        <td class="th"> </td>
        <td class="th"> </td>
    </tr>

    <tr id="place_1">
        <td style="color: #555; vertical-align: top; padding: 6px">
            <a name="1"></a>1.
        </td>

        <td style="height: 27px; vertical-align: middle; padding: 6px 30px 6px 0">
            <a class="all" href="/326/">MOVIE TITLE IN SPANISH</a>

            <br/>

            <span class="text-grey">MOVIE TITLE IN ENGLISH</span> 
        </td>

        <td style="width: 85px">
            <div style="width: 85px; position: relative">
                <a class="continue" href="/326/votes/">
                    9.191
                </a> 

                <span style="color: #777">
                    (592 184)
                </span>
            </div>
        </td>
    </tr>

    ...
    ...
    ...

Проблема в том, что я не могу получить текст внутри тега span. Я пробовал .text как a-tag, также пробовал .get_text () . Но ничего из этого не сработало. Мой код на Python:

for row in table.find_all('tr')[1:]:

    info = row.find_all('td')

    movies.append({
        'spn_title' : info[1].a.text,
        'eng_title' : info[1].span.text,
    })

Ошибки, которые я получаю:

AttributeError: объект 'NoneType' не имеет атрибута 'get_text'

или

'eng_title': info [1] .span.text AttributeError: объект 'NoneType' имеет без атрибута 'текст'

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Попробуйте следующее.Также проверьте переменную супа, потому что я могу без проблем запустить ваш код.Я подозреваю, что где-то позже в HTML у вас нет одного из них, присутствующих в строке.


Если имена классов согласованы, вы можете фильтровать только подходящие строки, имеющие соответствующие элементы типа с этими классами..Использование bs4 4.7.1.

for row in table.select('tr :has(span.text-grey):has(a.all)'):
    movies.append({
        'spn_title' : row.select_one('.all').text,
        'eng_title' : row.select_one('.text-grey').text
    })
print(movies)

В противном случае вам нужен способ обработки, если он отсутствует.Например,

for row in table.find_all('tr')[1:]:
     movies.append({
        'spn_title' : row.select_one('.all').text if row.select_one('.all') is not None else 'None',
        'eng_title' : row.select_one('.text-grey').text if row.select_one('.text-grey') is not None else 'None'
    })
print(movies)

0 голосов
/ 14 апреля 2019

Я думаю, что вы должны использовать innerHTML .

info[1].getElementsByTagName('span')[0].innerHTML 

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...