【问题标题】:Parse HTML and look for multiple classes and tags - most elegant way?解析 HTML 并寻找多个类和标签——最优雅的方式?
【发布时间】:2014-10-10 09:17:04
【问题描述】:

目前我有以下代码:

author_name = soup.find(True, {"class":["author", "author-name"]}) 
    if author_name is not None:
        print author_name.text
    else:
        author_name = soup.find(rel="author")
        if author_name is not None:
            print author_name.text
        else:
            print "No Author Found"

我正在寻找一篇文章的作者。因此,我在类中查找 class="author"class="author-name" 等条目或 rel=author 等条目。如果我按照我的方式进行操作,最终会出现很多不同的ifelse 语句。这对我来说似乎不是很优雅,即使我最近才开始编码。你们能帮我看看如何更优雅地做到这一点吗?

【问题讨论】:

    标签: python web-scraping beautifulsoup data-extraction


    【解决方案1】:

    你可以使用CSS selectors;这些让您可以在一个字符串中指定多个选择标准:

    soup.select('.author, .author-name, [rel="author"]')
    

    这会产生一个列表,循环可以让您选择找到最喜欢的一个,或者您可以使用next() 函数来获得第一个:

    for candidate in soup.select('.author, .author-name, [rel="author"]'):
        if candidate.text:
            author = candidate.text
            break
    else:
        print "No author found"
    

    soup.select() 调用将包含任何在文档顺序中匹配的元素,因此上面将找到第一个符合条件的元素,无论它如何限定;如果在文档中首先找到rel="author",它不会更喜欢.author-name

    【讨论】:

      【解决方案2】:

      我会这样做:

      results = []
      results += soup.select('.author')
      results += soup.select('.author-name') 
      results += soup.select('[rel=author]') 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多