如何在一些锚标签之间提取文本?

时间:2012-11-06 08:52:56

标签: python anchor beautifulsoup scraper

我需要从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

我搞砸了哪里?

5 个答案:

答案 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

atd元素中包含 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.findAlllink.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方法直接获取锚标记之间的文本。