我需要从HTML页面中提取艺术家的名字。这是该页面的一小部分:
</td>
<td class="playbuttonCell">
<a class="playbutton preview-track" href="/music/example" data-analytics-redirect="false" >
<img class="transparent_png play_icon" width="13" height="13" alt="Play" src="http://cdn.last.fm/flatness/preview/play_indicator.png" style="" />
</a>
</td>
<td class="subjectCell" title="example, played 3 times">
<div>
<a href="/music/example-artist" >Example artist name</a>
我试过这个但是没有做好这个工作。
import urllib
from bs4 import BeautifulSoup
html = urllib.urlopen('http://www.last.fm/user/Jehl/charts?rangetype=overall&subtype=artists').read()
soup = BeautifulSoup(html)
print soup('a')
for link in soup('a'):
print html
我搞砸了哪里?
答案 0 :(得分:3)
你可以试试这个:
In [1]: from bs4 import BeautifulSoup
In [2]: s = # Your string here...
In [3]: soup = BeautifulSoup(s)
In [4]: for anchor in soup.find_all('a'):
...: print anchor.text
...:
...:
here lies the text i need
此处,find_all
方法返回包含所有匹配锚标记的列表,之后我们可以打印text
属性以获取标记之间的值。
答案 1 :(得分:2)
for link in soup.select('td.subjectCell a'):
print link.text
a
个td
元素中包含 subjectCell 类的{{1}}元素。
答案 2 :(得分:1)
spans = soup.find_all("div", {"class": "overlay tran3s"})
for span in spans:
links = span.find_all('a')
for link in links:
print(link.text)
答案 3 :(得分:0)
soup.findAll
和link.attrs
可用于轻松读取href
属性。
工作代码:
soup = BeautifulSoup(html)
for link in soup.findAll('a'):
print (link.attrs['href'])
输出:
/music/example
/music/example-artist
答案 4 :(得分:-2)
正则表达式是你的朋友。作为RocketDonkey的答案的替代品,它正确使用BeautifulSoup;你可以使用像
这样的正则表达式解析汤('a')>([a-zA-Z]*|[0-9]|(\w\s*)*)</a>
您可以使用re.findall方法直接获取锚标记之间的文本。