HTMLを分解してテキストとターゲットをリンクする
-
08-07-2019 - |
質問
次のような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つの問題があるように見えます:
- link.content s 、link.content ではありません
- 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;)だけを取得したい場合は、別の正規表現を実行して、角かっこで囲まれたものをすべて削除します。
所属していません StackOverflow