python - 如何在 BeautifulSoup 中得到想要的值?

标签 python beautifulsoup

假设我们有如下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 返回第一个具有类 namediv 的元素所以问题是第一个 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 的回答中所指出的,如果你想选择所有只有类 namediv,那么你必须使用 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/

相关文章:

Python,匹配不均匀长度的抓取列表

python - 值错误: Unsupported or invalid CSS selector: "unit-4" python

python - 如何从文本文件中提取数据并导入到新的输出文件中?

python - 如何向python脚本发送短信?

python - &lt;script&gt; 标签和 HTMLParseError

python - Beautiful Soup 没有从网站上获取一些数据

python - pyCharm 命令行参数不起作用

python - 为什么我的 JSON 脚本没有从 FLASK 获取 JSONIFY 返回?

python - Pandas str.split (' ' ) 返回 NaN

python - 与 BeautifulSoup 一起逃离……