【问题标题】:python BeautifulSoup searching a tagpython BeautifulSoup 搜索标签
【发布时间】:2012-03-30 17:47:30
【问题描述】:

我在这里的第一篇文章,我试图在这个特定的 html 中找到所有标签,但我无法将它们取出,这是代码:

from bs4 import BeautifulSoup
from urllib import urlopen

url = "http://www.jutarnji.hr"
html_doc = urlopen(url).read()
soup = BeautifulSoup(html_doc)
soup.prettify()
soup.find_all("a", {"class":"black"})

find 函数返回 [],但我看到 html 中有带有 class:"black" 的标签,是不是漏掉了什么?

谢谢, 韦德兰

【问题讨论】:

  • 你用的是什么python版本/库版本/操作系统?

标签: python beautifulsoup


【解决方案1】:

我也有同样的问题。

试试

soup.findAll("a",{"class":"black"})

而不是

soup.find_all("a",{"class":"black"})

soup.findAll() 对我很有效。

【讨论】:

  • 也适用于其他元素,例如:soup.findAll("label",{"for":"Form_CompanyName"})
【解决方案2】:

这里的问题是网站的类标签没有用空格与 href 属性值的末尾分开。 BeautifulSoup 似乎不能很好地处理这个问题。一个可重现的测试用例如下

>>> BeautifulSoup.BeautifulSoup('<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/" class="black">').prettify()
'<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/" class="black">\n</a>'
>>> BeautifulSoup.BeautifulSoup('<a href="http://www.jutarnji.hr/crkva-se-ogradila-od--cjenika--don-mikica--osim-krizme--sve-druge-financijske-obveze-su-neprihvatljive/1018314/"class="black">').prettify()
''

【讨论】:

    【解决方案3】:

    这似乎对我有用,所以我会说问题出在您的 html 文档上。

    我尝试运行以下命令:

    from bs4 import BeautifulSoup
    
    html_doc = """<html>
     <body>
      <a class="black">
       <b>
        text1
       </b>
       <c>
        text2
       </c>
      </a>
      <a class="micio">
      </a>
      <a class="black">
      </a>
     </body>
    </html>"""
    soup = BeautifulSoup(html_doc)
    soup.prettify()
    print(soup.find_all("a", {"class":"black"}))
    

    我得到了输出:

    [<a class="black">
    <b>
        text1
       </b>
    <c>
        text2
       </c>
    </a>, <a class="black">
    </a>]
    

    编辑:正如@Puneet 所指出的,问题可能是您获取的html 中的属性之间缺少空格。

    例如,我尝试将上面的示例更改为:

    html_doc = """<html>
     <body>
      <aclass="black">
    
    # etc.. as before
    

    结果我得到了一个空列表:[]

    【讨论】:

      【解决方案4】:

      似乎使用 lxml 解决了这个问题:

      from bs4 import BeautifulSoup
      import lxml
      from urllib import urlopen
      
      url = "http://www.jutarnji.hr"
      html_doc = urlopen(url).read()
      soup = BeautifulSoup(html_doc, "lxml")
      soup.prettify()
      
      soup.find_all("a", {"class":"black"})
      

      【讨论】:

        猜你喜欢
        • 2016-11-13
        • 1970-01-01
        • 2021-12-11
        • 2015-11-04
        • 1970-01-01
        • 2019-09-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多