美丽的汤 - Python

时间:2016-09-03 14:30:28

标签: python

我希望提出一个非常简单的问题。我遇到过以下代码,但未能找到合适的解释:

  1. 在这种情况下.attrs函数究竟做了什么?
  2. 最后['href']部分的功能是什么,即该部分代码究竟执行了什么?
  3. 以下是代码:

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    html = urlopen("url")
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a"):
        if 'href' in link.attrs:
        print (link.attrs['href']) 
    

2 个答案:

答案 0 :(得分:1)

让我们在导入后逐行进行

  • 将网址加载到名为html
  • 的变量中
  • 从html
  • 创建BeautifulSoup对象
  • 对于对象的“a”标记中的每个链接(它遍历html中的html标记,找到所有<a>并循环遍历它们)
  • 如果标签的属性有'href'(<a href=""> - href是一个属性,那就存储在链接的.attrs属性中)
  • 打印到stdout具有键'href'的属性(它是带有'href':'http://something'的字典)

那里的缩进有点不对,print应该比if

更缩进

答案 1 :(得分:1)

让我们自己尝试一下这个问题并看看:

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://stackoverflow.com/q/39308028/1005215")
bsObj = BeautifulSoup(html)
  

i).attrs函数在这段代码中究竟做了什么

In [6]: bsObj.findAll("a")[30]
Out[6]: <a class="question-hyperlink" href="/questions/39308028/beautifuelsoup-python">Beautifuelsoup - Python</a>

In [7]: bsObj.findAll("a")[30].attrs
Out[7]: 
{'class': ['question-hyperlink'],
 'href': '/questions/39308028/beautifuelsoup-python'}

In [8]: type(bsObj.findAll("a")[30])
Out[8]: bs4.element.Tag

如果您阅读documentation,您会发现标签可能包含任意数量的属性。在元素编号30中,标记具有属性&#39; class&#39;和&#39; href&#39;

  

ii)最后[&#39; href&#39;]部分的功能是什么

In [9]: bsObj.findAll("a")[30]['href']
Out[9]: '/questions/39308028/beautifuelsoup-python'

如果您查看上面的输出,您会看到该标记有一个属性&#39; href&#39;并且上面的代码为我们提取了该属性的值。