【问题标题】:BeautifulSoup link attribute in PythonPython中的BeautifulSoup链接属性
【发布时间】:2021-04-09 11:14:03
【问题描述】:

我通过参考 Ryan Mitchell 的“Web Scraping with Python”来探索 BeautifulSoup。

有一些示例代码解释了从维基百科抓取文章链接。为简洁起见,我省略了导入代码。代码是:

html = urlopen("http://en.wikipedia.org")
bsObj = BeautifulSoup(html)

for link in bsObj.findAll("a", href = re.compile("^(/wiki/)((?!:).)*$")):
     if 'href' in link.attrs:
          print(link.attrs['href'])

我很困惑为什么代码需要包含 if 语句:

if 'href' in link.attrs:

findAll 函数不是返回所有具有指定href 的锚标记吗?因此,假设所有“链接”都将具有“href”作为属性不是可以吗? 提前谢谢!

【问题讨论】:

  • 您遇到的确切错误是什么?您是否尝试在终端上打印错误?
  • 您不能确定a 标记有链接(href 属性)。这就是测试 (if 'href' in link.attrs:...) 的用途。首先测试href是否在属性中,如果有则打印值。

标签: python web-scraping beautifulsoup findall


【解决方案1】:

您的想法是有效的,但是尝试通过添加 else 语句并在 else 语句中打印 link.attrs 来进行试验,看看是否有任何链接没有 href 属性,这种情况绝不应该是这样,但你永远不知道,祝你好运。

【讨论】:

    【解决方案2】:

    因为从这一行返回

    for link in bsObj.findAll("a", href = re.compile("^(/wiki/)((?!:).)*$")):
    

    不仅是'href',还有其他任何属性

    所以这一行 if 'href' in link.attrs: 确保你只获得属性 'href'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2019-09-24
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多