如何在Python中使用Beautifulsoup查找div中的所有锚标签

时间:2016-02-18 01:52:03

标签: python html python-2.7 web-scraping beautifulsoup

这就是我的HTML看起来我解析的方式。它全部在一个表中并重复多次,我只想要div中的href属性值,其属性为class="Special_Div_Name"。然后所有这些div都在表行内,并且有很多行。

<tr>
   <div class="Special_Div_Name">
      <a href="something.mp3">text</a>
   </div>
</tr>

我想要的只是{&#34; .mp3&#34;中的href属性值。在div中,属性为class="Special_Div_Name"

到目前为止,我能够提出这段代码:

download = soup.find_all('a', href = re.compile('.mp3'))
for text in download:
    hrefText = (text['href'])
    print hrefText

此代码目前打印的页面上的每个href属性值都以&#34; .mp3&#34;结尾并且它非常接近于我想做的事情。它只是我只想要在该div类中的&#34; .mp3&#34;。

2 个答案:

答案 0 :(得分:8)

这个小调整可以让你得到你想要的东西:

special_divs = soup.find_all('div',{'class':'Special_Div_Name'})
for text in special_divs:
    download = text.find_all('a', href = re.compile('\.mp3$'))
    for text in download:
        hrefText = (text['href'])
        print hrefText

答案 1 :(得分:5)

由于Beautiful Soup接受CSS selectors .select() methodattribute selector大部分,我建议使用tutorial from OpenCV [href$=".mp3"]来选择a元素以href结尾的.mp3属性。

然后你可以只选择.Special_Div_Name选择器,以便只选择作为后代的锚元素:

for a in soup.select('div.Special_Div_Name a[href$=".mp3"]'):
    print (a['href'])

在更一般的情况下,如果您只想选择具有a属性的[href]元素作为div元素的后代,那么您将使用选择器{ {1}}:

div a[href]

如果您不使用上面的代码,那么根据您提供的原始代码,您需要选择类for a in soup.select('div a[href]'): print (a) 的所有元素,然后您需要迭代那些元素并选择后代锚元素:

Special_Div_Name

作为旁注,for div in soup.select('.Special_Div_Name'): for a in div.find_all('a', href = re.compile('\.mp3$')): print (a['href']) 应为re.compile('.mp3'),因为re.compile('\.mp3$')在正则表达式中具有特殊含义。此外,您还需要锚点.以便在sting结尾处匹配(而不是在字符串中的任何位置)。