質問

次のような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

i get

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

コンテンツが見つからないのはなぜですか?

編集:アドバイスに従って「スタック」について詳しく説明します:)

役に立ちましたか?

解決

美しいスープを使用します。自分でやるのは見た目よりも難しいので、試してみてテストしたモジュールを使うほうがいいでしょう。

編集:

あなたが欲しいと思う:

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

他のヒント

リンクの属性とコンテンツを取得するコード例を示します:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url))
for link in soup.findAll('a'):
    print link.attrs, link.contents

2つの問題があるように見えます:

  1. link.content s 、link.content
  2. ではありません
  3. attrsは文字列ではなく辞書です。 HTML要素の各属性のキーと値のペアを保持します。 link.attrs ['href']は探しているものを取得しますが、href属性のないタグに出会った場合に備えて、それをチェックでラップしたいでしょう。

他の人は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番目の例の&quot; textsomething&quot;)だけを取得したい場合は、別の正規表現を実行して、角かっこで囲まれたものをすべて削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top