dds*_*itz 5 html python beautifulsoup web-scraping python-2.7
这就是我的HTML看起来我正在解析的方式.它都在一个表中,并且重复多次,我只想要hrefdiv中带有属性的属性值class="Special_Div_Name".然后所有这些div都在表行内,并且有很多行.
<tr>
<div class="Special_Div_Name">
<a href="something.mp3">text</a>
</div>
</tr>
Run Code Online (Sandbox Code Playgroud)
我想要的只是href以".mp3"结尾的属性值,它们在带有属性的div中class="Special_Div_Name".
到目前为止,我能够提出这个代码:
download = soup.find_all('a', href = re.compile('.mp3'))
for text in download:
hrefText = (text['href'])
print hrefText
Run Code Online (Sandbox Code Playgroud)
此代码当前打印出href以".mp3"结尾的页面上的每个属性值,并且非常接近于完全按照我的意愿行事.它只是我只想要div类中的".mp3".
这个小调整可以让你得到你想要的:
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
Run Code Online (Sandbox Code Playgroud)
由于Beautiful Soup 使用该方法接受大多数CSS选择器,因此我建议使用属性选择器来选择属性以.结尾的元素..select() [href$=".mp3"]ahref.mp3
然后你可以只添加选择器.Special_Div_Name,以便只选择作为后代的锚元素:
for a in soup.select('div.Special_Div_Name a[href$=".mp3"]'):
print (a['href'])
Run Code Online (Sandbox Code Playgroud)
在更一般的情况下,如果您只想选择a具有[href]属性元素的后代的div元素,那么您将使用选择器div a[href]:
for a in soup.select('div a[href]'):
print (a)
Run Code Online (Sandbox Code Playgroud)
如果您不使用上面的代码,那么根据您提供的原始代码,您需要选择具有类的所有元素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'])
Run Code Online (Sandbox Code Playgroud)
作为旁注,re.compile('.mp3')应该是re.compile('\.mp3$')因为.在正则表达式中具有特殊含义.此外,您还需要锚点$以便在sting结尾处匹配(而不是在字符串中的任何位置).
| 归档时间: |
|
| 查看次数: |
2514 次 |
| 最近记录: |