5

次のようなHTMLリンクが与えられます

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

URLとテキストを分離するにはどうすればよいですか?

更新

私はBeautifulSoupを使用していますが、その方法がわかりません。

やった

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

そこには2つの問題があるようです:

  1. link.contentではなく、link.content です
  2. attrs は辞書であり、文字列ではありません。HTML 要素の各属性のキーと値のペアを保持します。link.attrs['href'] は探しているように見えるものを取得しますが、href 属性のないタグに遭遇した場合に備えて、それをチェックでラップする必要があります。
于 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>"

テキストだけを取得したい場合(例: 上記の 2 番目の例の "textsomething")、その上で別の正規表現を実行して、尖った角かっこの間のすべてを削除します。

于 2008-11-13T00:51:54.530 に答える