3

これはHTMLコードの一部です(おいしいから):

<h4>
<a rel="nofollow" class="taggedlink " href="http://imfy.us/" >Generate Secure Links with Anonymous Referers &amp; Anti-Bot Protection</a>
<span class="saverem">
  <em class="bookmark-actions">
    <strong><a class="inlinesave action" href="/save?url=http%3A%2F%2Fimfy.us%2F&amp;title=Generate%20Secure%20Links%20with%20Anonymous%20Referers%20%26%20Anti-Bot%20Protection&amp;jump=%2Fdux&amp;key=fFS4QzJW2lBf4gAtcrbuekRQfTY-&amp;original_user=dux&amp;copyuser=dux&amp;copytags=web+apps+url+security+generator+shortener+anonymous+links">SAVE</a></strong>
  </em>
</span>
</h4>

class="inlinesave action" であるすべてのリンクを見つけようとしています。コードは次のとおりです。

sock = urllib2.urlopen('http://delicious.com/theuser')
html = sock.read()
soup = BeautifulSoup(html)
tags = soup.findAll('a', attrs={'class':'inlinesave action'})
print len(tags)

しかし、何も見つかりません!

何かご意見は?

ありがとう

4

4 に答える 4

1

まさにこれら2つのクラスでアンカーを探したい場合は、正規表現を使用する必要があると思います:

tags = soup.findAll('a', attrs={'class': re.compile(r'\binlinesave\b.*\baction\b')})

クラス名の順序が逆の場合、この正規表現は機能しないことに注意してください ( class="action inlinesave")。

次のステートメントは、すべてのケースで機能するはずです (見栄えは悪いですが)。

soup.findAll('a', 
    attrs={'class': 
        re.compile(r'\baction\b.*\binlinesave\b|\binlinesave\b.*\baction\b')
    })
于 2009-11-25T13:09:58.833 に答える
0

Python 文字列メソッド

html=open("file").read()
for item in html.split("<strong>"):
    if "class" in item and "inlinesave action" in item:
        url_with_junk = item.split('href="')[1]
        m = url_with_junk.index('">') 
        print url_with_junk[:m]
于 2009-11-25T13:46:10.730 に答える
0

pyparsing を使用して前進するかもしれません:

from pyparsing import makeHTMLTags, withAttribute

htmlsrc="""<h4>... etc."""

atag = makeHTMLTags("a")[0]
atag.setParseAction(withAttribute(("class","inlinesave action")))

for result in atag.searchString(htmlsrc):
    print result.href

与える ('...' で切り取られた長い結果出力):

/save?url=http%3A%2F%2Fimfy.us%2F&amp;title=Genera...+anonymous+links
于 2009-11-25T17:12:49.063 に答える
0

その問題はバージョン 3.1.0で修正されている可能性があります。

>>> html="""<h4>
... <a rel="nofollow" class="taggedlink " href="http://imfy.us/" >Generate Secure Links with Anony
... <span class="saverem">
...   <em class="bookmark-actions">
...     <strong><a class="inlinesave action" href="/save?url=http%3A%2F%2Fimfy.us%2F&amp;title=Gen
...   </em>
... </span>
... </h4>"""
>>>
>>> from BeautifulSoup import BeautifulSoup
>>> soup = BeautifulSoup(html)
>>> tags = soup.findAll('a', attrs={'class':'inlinesave action'})
>>> print len(tags)
1
>>> tags
[<a class="inlinesave action" href="/save?url=http%3A%2F%2Fimfy.us%2F&amp;title=Generate%20Secure%
>>>

BeautifulSoup 2.1.1 も試してみましたが、まったく機能しません。

于 2009-11-25T14:05:43.043 に答える