我要解析的网站结构如下:
<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”对象具有 没有属性“文字”
答案 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)