无法从SPAN标签获取文本

时间:2019-04-14 13:26:12

标签: python html parsing web-scraping beautifulsoup

我要解析的网站结构如下:

<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-tag内获取文本。我已经尝试将 .text 用作标签,也尝试了 .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':信息[1] .span.text AttributeError:“ NoneType”对象具有   没有属性“文字”

2 个答案:

答案 0 :(得分:1)

尝试以下方法。另外,请检查您的汤变量,因为我可以毫无问题地运行您的代码。我怀疑在HTML的后面某处,您不会连续出现其中之一。


如果类名是一致的,则可以使用bs4 4.7.1仅过滤那些具有适当类型元素的合格行。

DateTime(2019, 5, 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)

答案 1 :(得分:0)

我认为您应该使用innerHTML

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

应该工作。