使用 Python 从 HTML 中获取 div

Posted

技术标签:

【中文标题】使用 Python 从 HTML 中获取 div【英文标题】:get div from HTML with Python 【发布时间】:2014-01-25 08:35:48 【问题描述】:

我想从 html 页面中获取某个 div 中的值

    <div class="well credit">

      <div class="span2">
          <h3><span>
              $ 5.402 
          </span></h3>
      </div>

    </div>

我已经使用正则表达式 ( re.seach() ) 完成了它,但它需要很长时间才能找到 div,因为它是一个巨大的 html。

有没有办法在没有外部库的情况下更快地做到这一点?

谢谢

【问题讨论】:

好吧。考虑使用lxml。这是一个内置的 对不起,如果这是一个简单的建议,但如果您确切知道div 将如何编码,为什么不直接使用find,可能是递归的? 【参考方案1】:

Scrapy 也可能是一个解决方案。请阅读http://doc.scrapy.org/en/latest/topics/selectors.html

x = sel.xpath('//div[@class="span2"]')
for i in x:
    print i.extract()

输出:

<div class="span2">
    <h3><span>
        $ 5.402 
    </span></h3>
</div>

【讨论】:

【参考方案2】:

Python 在标准库中只有一个 HTML 解析器,而且它非常低级,所以如果你想使用 HTML,你必须安装 一些 类的 HTML 解析库。 p>

lxml 是迄今为止最快的:

import lxml.html

root = lxml.html.parse(handle)
price = root.xpath('//div[@class="well credit"]//span/@text')[0]

如果您希望它更快,请使用 root.iter 并在您点击正确的元素后停止解析 HTML。

【讨论】:

【参考方案3】:

我会使用BeautifulSoup

使用&lt;div&gt; 标签获取所有内容:

soup = BeautifulSoup(html)#make soup that is parse-able by bs
soup.findAll('div') 

要获取 span 内的值,您可以这样做:

soup.find('span').get_text()

有很多不同的方法可以获取您需要的信息

祝你好运,希望这会有所帮助!

【讨论】:

谢谢,它工作得很好:)。我使用 credits = soup.find_all("div", "class" : "well credit") 来更具体一点,并且 html 上有更多带有信用的 div

以上是关于使用 Python 从 HTML 中获取 div的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 - 从 PHP 中的 html 字符串获取表格

使用 BeautifulSoup 按 id 获取 div 的内容

javascript获取div高度

如何使用Selenium从网页获取所有元素?

如何从记录集中获取数据到 html div

使用 HTML 解析器获取特定 div 的内容 [关闭]