Beautifulsoup - 如何获取特定类别块内的所有链接?

5

I have the following HTML Dom:

    <div class="meta-info meta-info-wide"> <div class="title">Разработчик</div> <div class="content contains-text-link"> 

<a class="dev-link" href="http://www.jourist.com&amp;sa=D&amp;usg=AFQjCNHiC-nLYHAJwNnvDyYhyoeB6n8YKg" rel="nofollow" target="_blank">Перейти на веб-сайт</a>

 <a class="dev-link" href="mailto:info@jourist.com" rel="nofollow" target="_blank">Написать: info@jourist.com</a> 

 <div class="content physical-address">Diagonalstraße 41
    20537 Hamburg</div> </div> </div>

我将为您翻译以下内容:

我需要获取位于div.meta-info-wide块内,带有dev-link类的所有链接(url)。

虽然我尝试了这种显而易见的方法,但并没有奏效:

divTag = soup.find_all("div", {"class":"meta-info-wide"})
        print(len(divTag))

        for tag in divTag:
            tdTags = tag.find_all("a", {"class":"dev-link"})
            for tag in tdTags:
                print tag.text

你的代码运行良好。我使用Python3和BS4。 - 宏杰李
1个回答

4
请尝试以下操作:
import bs4

html = """    
<div class="meta-info meta-info-wide"> <div class="title">Разработчик</div> <div class="content contains-text-link"> 
<a class="dev-link" href="http://www.jourist.com&amp;sa=D&amp;usg=AFQjCNHiC-nLYHAJwNnvDyYhyoeB6n8YKg" rel="nofollow" target="_blank">Перейти на веб-сайт</a>
<a class="dev-link" href="mailto:info@jourist.com" rel="nofollow" target="_blank">Написать: info@jourist.com</a> 
<div class="content physical-address">Diagonalstraße 4120537 Hamburg</div> </div> </div>"""

soup = bs4.BeautifulSoup(html, "html.parser")

for div in soup.find_all("div", {"class":"meta-info-wide"}):
    for link in div.select("a.dev-link"):
        print link['href']

这将为您提供:
http://www.jourist.com&sa=D&usg=AFQjCNHiC-nLYHAJwNnvDyYhyoeB6n8YKg
mailto:info@jourist.com 

select() 方法用于返回所有具有 dev-link 类的 a 标签。当涉及两个或更多 CSS 类时,建议使用此方法。

测试环境:BeautifulSoup 4.5.1、Python 2.7.12。


我使用的是 from bs4 import BeautifulSoup 而不是简单的 import bs4 - Hamama
如果执行以下代码:c = soup.find_all("div", {"class":"meta-info-wide"}) print(len(c)) 它会返回零(0)。 - Hamama
当有多个类被使用时,使用select()语句会更好。 - Martin Evans
你的导入方式没有问题,使用哪种方式取决于你自己的喜好。 - Martin Evans
OP的代码是可以工作的,我认为问题可能出在Python版本或BeautifulSoup版本上。 - 宏杰李

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接