这就是我的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;。
答案 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()
method的attribute 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结尾处匹配(而不是在字符串中的任何位置)。