3

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

我在哪里搞砸了?

4

5 回答 5

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属性以获取标记之间的值。

于 2012-11-06T08:56:53.973 回答
2
for link in soup.select('td.subjectCell a'):
    print link.text

选择(就像 CSS 一样)具有subjectCell类的a元素内的元素。td

于 2012-11-06T09:50:36.443 回答
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)
于 2020-01-21T17:59:17.747 回答
0

soup.findAll并可link.attrs用于href轻松读取属性。

工作代码:

soup = BeautifulSoup(html)

for link in soup.findAll('a'):
    print (link.attrs['href'])

输出:

/music/example
/music/example-artist
于 2020-01-21T18:36:27.247 回答
-2

正则表达式是你的朋友。作为 RocketDonkey 正确使用 BeautifulSoup 的答案的替代方案;您可以使用正则表达式解析 soup('a')

>([a-zA-Z]*|[0-9]|(\w\s*)*)</a>

您可以利用re.findall方法直接抓取锚标记之间的文本。

于 2012-11-06T09:18:14.713 回答