1

特定のサイトからのリンクを出力する Python プログラムがあります。次のようになります。

import urllib
import re
import mechanize
import urlparse

url = "http://sparkbrowser.com"

#Mechanize
br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [('User-agent', 'Firefox')]
br.open(url)


for link in br.links():
newurl = urlparse.urljoin(link.base_url, link.url)
b1 = urlparse.urlparse(newurl).hostname
b2 = urlparse.urlparse(newurl).path
wholeLink = "http://"+b1+b2
    linkTxt = link.text
    print wholeLink
    print linkTxt

そのような出力が得られます(この目的のために結果を短縮しました):

http://twitter.com/sparkbrowser
Twitter[IMG]
http://facebook.com/sparkbrowser
Facebook[IMG]
http://www.flickr.com/photos/sparkbrowser
Flickr[IMG]
http://youtube.com/sparkbrowser
Youtube[IMG]
http://vimeo.com/user7123627
Vimeo[IMG]
http://plus.google.com/103169821052890438536
Google[IMG]
http://sparkbrowser.com/index.php
Home
http://sparkbrowser.com/download.php
Download
http://sparkbrowser.com/about.php
About

[IMG]テキストに含まれる結果を除外するにはどうすればよいですか?

regexand で何かを試しました.search()が、失敗しました。印刷する場合のようなものが必要ですがlink.text != ('*[IMG]')、正しく実装する方法がわかりません...

どんなアドバイスでも大歓迎です!

4

2 に答える 2

1

in演算子を使用します。

...
for link in br.links():
    newurl = urlparse.urljoin(link.base_url, link.url)
    b1 = urlparse.urlparse(newurl).hostname
    b2 = urlparse.urlparse(newurl).path
    wholeLink = "http://"+b1+b2
    linkTxt = link.text
    if '[IMG]' in linkTxt:
        continue
    print wholeLink
    print linkTxt

または、not in

...
for link in br.links():
    ...
    if '[IMG]' not in linkTxt:
        print wholeLink
        print linkTxt

対話型シェル セッションの例

>>> '[IMG]' in 'Stackoverflow [IMG]'
True
>>> '[IMG]' not in 'Stackoverflow [IMG]'
False
>>> '[IMG]' in 'Stackoverflow'
False
>>> '[IMG]' not in 'Stackoverflow'
True

シーケンス タイプ — str、unicode、...を参照してください。

于 2013-08-05T07:33:14.017 に答える
1

text_regexに引数を渡してリンクをフィルタリングすることをお勧めしbr.links()ます:

for link in br.links(text_regex=re.compile('^((?!IMG).)*$'))

'^((?!IMG).)*$'を含まないすべてのリンク テキストに一致しますIMG

それが役立つことを願っています。

于 2013-08-05T07:33:52.050 に答える