我正在尝试最小化我的代码,使其更有效率。但是,我被这个 KeyError 卡车撞到了,我不知道出了什么问题。请各位大佬帮帮我,指点一下为什么我的表情不对? PS我是业余水平。
使用这些代码:
recommended = soup.select('table:has(font:contains("推荐主题")), '
'table:has(font:contains("版块主题"))')
for item in recommended:
for i in item.select(".folder:has(a)"):
我将拥有以下 DOM:
<td class="folder"><a href="thread-10439294-1-1.html" target="_blank" title="新窗口打开"><img src="images/green001/folder_new.gif"/></a></td>
<td class="folder"><a href="thread-10439293-1-1.html" target="_blank" title="新窗口打开"><img src="images/green001/folder_new.gif"/></a></td>
<td class="folder"><a href="thread-10439292-1-1.html" target="_blank" title="新窗口打开"><img src="images/green001/folder_new.gif"/></a></td>
<td class="folder"><a href="thread-10439290-1-1.html" target="_blank" title="新窗口打开"><img src="images/green001/folder_new.gif"/></a></td>
但是当我再添加一行时,
for item in recommended:
for i in item.select(".folder:has(a)"):
url_tail = i['href']
我会得到这个 KeyError:
return self.attrs[key]
KeyError: 'href'
我想从中得到的是 href 链接,谢谢大家。
最佳答案
@facelessuser 很好地解释了错误 (+) 并给出了我的首选选择器。看起来可能还有另外两个 attribute = value作为计划 B 的选择器可能性
或者:
[href^="thread-"]
或者:
[title="新窗口打开"]
可以用在列表理解中,例如
links = [item['href'] for item in soup.select('[href^='thread-']')]
您的 select
可能是 item
而不是 soup
。如果最终匹配范围太广,您总是可以将父类放入 .folder [title="新窗口打开"]
关于python - Beautifulsoup 过滤器结果在 "for i"循环中引发 KeyError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55979050/