【问题标题】:BeautifulSoup not extracting div properlyBeautifulSoup 没有正确提取 div
【发布时间】:2019-04-02 09:26:04
【问题描述】:

BeautifulSoup 没有正确提取我想要的 div。我不确定我做错了什么。这是html:

                <div id='display'>
                      <div class='result'>
                           <div>text0 </p></div>
                           <div>text1</div>
                           <div>text2</div>
                       </div>
                  </div>

这是我的代码:

div = soup.find("div", {"class": "result"})
print(div)

我看到了这个:

<div class="result">
<div>text0 </div></div>

我期待的是这样的:

<div class="result">
<div>text0</div>
<div>text1</div>
<div>text2</div>
</div>

如果我删除 &lt;/p&gt; 标记,这将按预期工作。换句话说,&lt;/p&gt; 标签似乎让解析器崩溃了。

编辑:

这在 Python 2.7.12、beautifulsoup4 版本 4.5.1 上按预期工作。但不适用于 Python 3.6.4、beautifulsoup4 版本 4.7.1。不确定罪魁祸首是python版本还是bs4版本(更有可能)。

有人可以帮忙吗?

【问题讨论】:

  • 为什么html中没有打开标签&lt;p&gt;
  • 这不是我的 html。我正在尝试抓取其他人编写的 html。我知道没有打开&lt;p&gt; 标签。但是 BeautifulSoup 应该只担心&lt;/div&gt; 不是吗?无论如何,有没有办法解决这个问题?
  • 只需将div = soup.find("div", {"class": "result"}) 更改为div = soup.find_all("div", {"class": "result"}) 即可。
  • 运行你的代码,我确实得到了你想要得到的东西。您的问题存在某种不完整/不一致之处。
  • 你在 python3 上的 BeautifulSoup 版本是多少?

标签: beautifulsoup html-parsing


【解决方案1】:

我认为使用 select 没有问题

from bs4 import BeautifulSoup as bs
html = '''
<div id='display'>
                      <div class='result'>
                           <div>text0 </p></div>
                           <div>text1</div>
                           <div>text2</div>
                       </div>
                  </div>
                  '''
soup = bs(html)
soup.select('.result')

【讨论】:

  • 我运行了确切的程序,print(soup.select('.result')) 作为最后一行。它打印了[&lt;div class="result"&gt; &lt;div&gt;text0 &lt;/div&gt;&lt;/div&gt;] 我想此时,根据您和上面的@sentence 评论,看起来这可能是我的特定设置的问题。我在 Python 3.6.4 上。
  • 刚刚在 Python 2.7.12 上运行了完全相同的程序,它打印出 [&lt;div class="result"&gt;\n&lt;div&gt;text0 &lt;/div&gt;\n&lt;div&gt;text1&lt;/div&gt;\n&lt;div&gt;text2&lt;/div&gt;\n&lt;/div&gt;] 这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2019-12-14
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 2018-11-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多