2012-01-16 11 views
-2
#<link rel='canonical' href='http://www.samplewebsite.com/image/5434553/' /> 

#I am trying to grab the text in href 

image = str(Soup) 

image_re = re.compile('\<link rel=\'cononical\' href=') 

image_pat = re.findall(image_re, image) 

print image_pa 

#>> [] 

#Thanks! 
+0

「スープ」はどのタイプですか? – soulcheck

答えて

5

編集:これは私がこの質問の前のバージョンで見たと思ったBeautifulSoupパッケージを使用します。

編集:より簡単で、これは次のとおりです。代わりにすべてのことの

soup = BeautifulSoup(document) 
links = soup.findAll('link', rel='canonical') 
for link in links: 
    print link['href'] 

、あなたが使用することができます。

soup = BeautifulSoup(document) 
links = soup("link") 
for link in links: 
    if "rel" in link and link["rel"] == 'canonical': 
     print link["href"] 
+0

+1、方法クール。どのライブラリが必要ですか、そして/または、これを動作させるためにどのモジュールをインポートする必要がありますか? –

+0

あなたの既に使用しているようにBeautifulSupp、 – jknupp

+0

私は質問を投稿した人ではありません(さらに、私が見ていた質問のバージョンではBeautifulSoupの参照が見つかりませんでした)。私はBeautifulSoupを見ることができますが、将来の初心者は、あなたがコメントやあなたの答えにそれを追加した場合、より多くの情報が役に立つかもしれないと思っていました。 –

0

使用の2つの正規表現:

import re 
link_tag_re = re.compile(r'(<link[^>]*>') 
# capture all link tags in your text with it. Then for each of those, use: 
href_capture = re.compile(r'href\s*=\s*(\'[^\']*\'|"[^"]*")') 

最初の正規表現の意志<link>タグ全体をキャプチャします。 2番目はhref="something"またはhref='something'を探します。

一般的に、この問題は完全に規則的な言語問題ですが、HTML用のXMLパーサを使用してください。この種のものに使うのはずっと簡単で、問題を起こす可能性は低いです。

0

lxml.htmlまたはBeautifulSoupなどのHTMLパーサーを使用する必要があります。しかし、あなたは、単一のlinkhrefをつかむしたい場合は、あまりにも簡単な正規表現を使用することができます。

re.findall(r"href=(['\"])([^\1]*)\1", url) 
0

あなたがデータに適切なHTMLパーサを使用する方がよいでしょうが、あなたが本当に行きたい場合

>>> data = "... <link rel='canonical' href='http://www.samplewebsite.com/image/5434553/' /> ..." 
>>> 
>>> re.search("<link[^>]+?rel='canonical'[^>]+?href='([^']+)", x).group(1) 
'http://www.samplewebsite.com/image/5434553/' 
>>> 

また、HTMLでは二重引用符ではなく一重引用符を使用することにも注意してください。

0

これは、あなたが与えてくれたhtmlの例と一致するように、正規表現のようになります。

<link rel='canonical' href='(\S+)' 
をしかし、私は正規表現が適切なツールであるかはわかりません。この正規表現は、値に二重引用符(または引用符を使用しない)を使用すると失敗します。または、relとhrefが回っている場合

BeautifulSoupのようなものを使用して、すべてのrel canonical href値を見つけて収集することをおすすめします。

関連する問題