【问题标题】:I am learning BeautifulSoup but I am getting an error我正在学习 BeautifulSoup,但出现错误
【发布时间】:2021-05-14 19:59:53
【问题描述】:

这是我的代码

import requests
from bs4 import BeautifulSoup

result = requests.get("https://www.whitehouse.gov/briefings-statements/")
src = result.content
soup = BeautifulSoup(src, 'lxml')

urls = []
for h2_tag in soup.find_all("h2"):
    a_tag = h2_tag.find('a')
    urls.append(a_tag.attrs not in ['href'])

print(urls)

这是错误

AttributeError: 'NoneType' object has no attribute 'attrs'

我的代码有什么问题

【问题讨论】:

  • 如果您接受某个答案,最好对答案进行投票以表示对花时间阅读您的问题并试图解决您的问题的人表示尊重。我们应该鼓励彼此的努力。

标签: python-3.x beautifulsoup


【解决方案1】:

有时h2_tag.find('a') 会返回None。您可以使用try/except 来解决此问题:

import requests
from bs4 import BeautifulSoup

result = requests.get("https://www.whitehouse.gov/briefings-statements/")
src = result.content
soup = BeautifulSoup(src, 'lxml')

urls = []
for h2_tag in soup.find_all("h2"):
    try:
        a_tag = h2_tag.find('a')
        urls.append(a_tag.attrs["href"])
    except AttributeError:
        continue

print(urls)

【讨论】:

    【解决方案2】:

    我对更简洁的代码的偏好是将限制放入节点的选择中,而不是稍后进行测试。在您的情况下,您可以通过使用检索具有a 子级的h2 的css 选择器来执行此操作。与您类似的布局:

    import requests
    from bs4 import BeautifulSoup
    
    result = requests.get("https://www.whitehouse.gov/briefings-statements/")
    src = result.content
    soup = BeautifulSoup(src, 'lxml')
    urls = []
    
    for h2_tag in soup.select('h2:has(a)'):
        a_tag = h2_tag.find('a')
        urls.append(a_tag['href'])
    
    print(urls)
    

    但是,我们可以比上面的更简洁:

    urls = [i['href'] for i in soup.select('h2 > a')]
    print(urls)
    

    上面选择的a元素是h2的直接子元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2013-10-08
      • 2016-11-19
      • 2014-03-08
      • 2011-06-11
      • 1970-01-01
      • 2020-05-08
      相关资源
      最近更新 更多