5

给定一个 HTML 链接,例如

<a href="urltxt" class="someclass" close="true">texttxt</a>

如何隔离 url 和文本?

更新

我正在使用 Beautiful Soup,但无法弄清楚如何做到这一点。

我做了

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))

links = soup.findAll('a')

for link in links:
    print "link content:", link.content," and attr:",link.attrs

我明白了

*link content: None  and attr: [(u'href', u'_redirectGeneric.asp?genericURL=/root    /support.asp')]*  ...
...

为什么我缺少内容?

编辑:按照建议详细说明“卡住”:)

4

4 回答 4

8

使用美丽的汤。自己做比看起来更难,最好使用久经考验的模块。

编辑:

我想你想要:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read())

顺便说一句,尝试在那里打开 URL 是个坏主意,好像它出错了可能会变得丑陋。

编辑2:

这应该向您显示页面中的所有链接:

import urlparse, urllib
from BeautifulSoup import BeautifulSoup

url = "http://www.example.com/index.html"
source = urllib.urlopen(url).read()

soup = BeautifulSoup(source)

for item in soup.fetchall('a'):
    try:
        link =  urlparse.urlparse(item['href'].lower())
    except:
        # Not a valid link
        pass
    else:
        print link
于 2008-11-13T00:40:29.483 回答
6

这是一个代码示例,显示了获取链接的属性和内容:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
for link in soup.findAll('a'):
    print link.attrs, link.contents
于 2008-11-13T00:48:43.150 回答
4

看起来你有两个问题:

  1. link.content s,而不是 link.content
  2. attrs is a dictionary, not a string. It holds key value pairs for each attribute in an HTML element. link.attrs['href'] will get you what you appear to be looking for, but you'd want to wrap that in a check in case you come across an a tag without an href attribute.
于 2008-11-13T01:23:56.947 回答
3

尽管我认为其他人可能正确地指出您使用 Beautiful Soup,但他们可能不是,并且使用外部库可能会大大超出您的目的。这是一个正则表达式,可以满足您的要求。

/<a\s+[^>]*?href="([^"]*)".*?>(.*?)<\/a>/

这是它的匹配项:

'<a href="url" close="true">text</a>'
// Parts: "url", "text"

'<a href="url" close="true">text<span>something</span></a>'
// Parts: "url", "text<span>something</span>"

如果您只想获取文本(例如:上面第二个示例中的“textsomething”),我只需在其上运行另一个正则表达式以去除尖括号之间的任何内容。

于 2008-11-13T00:51:54.530 回答