我曾经通过此
获取标签属性for a in soup.find_all('img', {'data-event': 'Clicked image'},
src=True,alt=True):
itemobj = a['src'] + ' --- ' + a['alt']
现在我在另一个网站上工作,当我尝试这个时,它抛出TypeError:'NoneType'对象不可迭代
song_link = line.find('td').find('a')['href'] (This works well)
sss = line.find('span')['title'] (This in not working. But when I delete ['title'] part it works and shows inside of the <span> tag
我的数据:
<span class="rating" title="4.5">
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__half"></span>
</span>
我一直在寻找解决方案,但到目前为止,他们都没有为我工作。
答案 0 :(得分:0)
当我在你提供的数据上尝试你的代码时,它对我来说很好,所以我假设有更多的数据。
soup.find('span')['title']
使用&#34; span&#34;检查它找到的第一件事,如果这不包含标题标记,则会抛出异常。
e.g。上
<span></span>
<span class="rating" title="4.5">
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__half"></span>
</span>
代码无效。
至少这是我几次发生的事情。
答案 1 :(得分:0)
这个非常不清楚的问题已经过去了三年,直到今天我还是以某种方式忘记了它。我看到这个问题已经传到了很多人,我想提供我认为可以绝对解决您代码中问题的输入。
不幸的是,我不记得我的代码存在的问题,而且我写的所有东西都还不清楚。但是,我确实有一些想法可能是造成问题的原因。这是我对您的建议。
1。仔细阅读文档:
BeaututifulSoup有一个非常好的书面文档,如果您不知道如何使用选择器并寻找一个懒惰的答案,就像我一样,我强烈建议您看一下位于此处的BS4文档:{{3 }}(特别是将选择器视为由于滥用CSS选择器而引起的最多问题)。与其花5分钟寻找答案,不如花10分钟学习它的工作原理。我向您保证,这将对您更加有益。
2。确保您拥有正确的对象
通过运行print(dir(your_object))
,您可以看到对象可以运行的所有方法。此外,每当您遇到困难时,请尝试调试代码并尝试查找错误。当时我在使用IDLE编辑器,但是最近我意识到VS Code具有内置的https://www.crummy.com/software/BeautifulSoup/bs4/doc/#,它非常有用,并且可以并且将在99%的时间内解决您的问题。
3。确保您输入正确的物品
@Friedrich Staufenbiel指出,我的数据很可能包含如下所示的额外<span>
元素
<span></span>
<span class="rating" title="4.5">
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__active"></span>
<span class="icon-rating-sm icon-rating-sm__half"></span>
</span>
这很可能是导致问题的原因,但我想指出的是,我在<span>
变量中寻找一个line
元素,这很可能是列表中包含以下内容的元素一个循环迭代。在这种情况下,由于并非所有人都拥有<span>
元素,因此程序可能会崩溃。最好的办法是将导致问题的代码部分放在这样的try-except
块中
try:
sss = line.find('span')['title']
except Exception as e:
print(e)
至少通过这种方式,您可以找到导致程序崩溃的代码部分,并将错误消息提供给其他人,以便他们可以更好地帮助您。
如果您按照我上面提到的方法进行工作,我将百分百确定您将解决所遇到的任何问题,此外,它们还是您应具备的良好工程实践。特别感谢@Friedrich Staufenbiel和@matusf的关注。