假设我们有如下html代码:
html = '<div class="dt name">abc</div><div class="name">xyz</div>'
soup = BeautifulSoup(html, 'lxml')
我想获取名称 xyz
。然后,我写
soup.find('div',{'class':'name'})
但是,它返回 abc
。
如何解决这个问题?
最佳答案
问题是 Beautiful Soup 返回第一个具有类 name
和 div
的元素所以问题是第一个 div 具有类 name
和类 dt
所以它选择那个 div。
因此,div
有所帮助,但它仍然缩小到 2 个 div
。接下来,它返回一个数组,因此检查第二个 div
以使用 print(soup('div')[1].text)
。如果你想打印所有的 div
使用这个代码:
for i in range(len(soup('div')))
print(soup('div')[i].text)
正如 Ankur Sinha 的回答中所指出的,如果你想选择所有只有类 name
的 div
,那么你必须使用 select
,像这样:
soup.select('div[class=name]')[0].get_text()
但是如果有多个 div
满足这个属性,使用这个:
for i in range(len(soup.select('div[class=name]'))):
print(soup.select('div[class=name]')[i].get_text())
继续 Ankur Sinha,当您使用 select
甚至只是 soup()
时,它会形成一个数组,因为可以有多个项目,所以这就是我使用 len()
,求出数组的长度。然后我在其上运行了一个 for
循环,然后在 i
从 0 开始打印了 select
函数。
当你这样做时,它宁愿给出一个特定的 div
而不是一个数组,如果它给出一个数组,调用 get_text()
会产生错误,因为该数组是不是 文本。
关于python - 如何在 BeautifulSoup 中得到想要的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523257/