我想使用BeautifulSoup从网站中提取href。 href在一个类中

时间:2015-03-04 06:27:33

标签: python python-2.7 beautifulsoup

代码如下:

<div class="browse"> 
<a href="xxx" > abc </a> 
<a href="zzz"> xyz </a>
</div>

我想使用BS4获取数据'xxx'和'zzz'。网页上有几个部门有这样的格式。所有这些链接都不同,它们包含的文本也不同。 怎么做?

2 个答案:

答案 0 :(得分:1)

给出带有以下

的文本文件foo.txt
<div class="browse">
<a href="xxx" > abc</a></div>
<div class="browse">
<a href="yyy" > abc</a></div>

>>> from bs4 import BeautifulSoup as bs4
>>> html = open("foo.txt").read()
>>> soup = bs4(html)
>>> [a.attrs for sub in soup.findAll(attrs={"class":"browse"}) for a in sub.findAll('a')]
[{'href': 'xxx'}, {'href': 'yyy'}]

答案 1 :(得分:0)

  

我使用find_all来获取所有具有class =“browse”

的数据

如果你没有用你的代码发布一个简单的例子,我们就无法分辨你做错了什么。以下是您可以执行的操作的示例:

from bs4 import BeautifulSoup

html = """
<div class="browse">
<a href="xxx"> abc</a>
</div>

<div> 
<a href="yyy"> abc</a>
</div>

<div class="browse"> 
<a href="zzz" > abc</a>
</div>
"""
soup = BeautifulSoup(html)
divs = soup.find_all('div', {"class": "browse"})

for div in divs:
    print(div.a['href'])

--output:--
xxx
zzz
  

代码如下:

<div class="browse"> 
<a href="xxx" > abc</a> .

很好的例子。 :(

如果你的html实际上是这样的:

html = """
<div class="browse">
<a href="xxx"> abc</a>

<div> 
<a href="yyy"> abc</a>

<div class="browse"> 
<a href="zzz" > abc</a>
"""

然后bs4将其解析为:

<html>
 <body>
  <div class="browse">
   <a href="xxx">
    abc
   </a>
   <div>
    <a href="yyy">
     abc
    </a>
    <div class="browse">
     <a href="zzz">
      abc
     </a>
    </div>
   </div>
  </div>
 </body>
</html>

注意div标签是如何彼此嵌套的。我不知道这是否给你带来麻烦 - 但上面的代码仍然有用。