-1

アルファベットを調べて、要求されていない4文字のTwitter名をすべて見つけることを目的としたスクリプトを作成しました(Pythonは初めてなので、実際には練習用です)。'urllib2'を使用してURLからWebサイトのHTMLを取得する以前のスクリプトをいくつか作成しましたが、今回は機能していないようです。これが私のスクリプトです:

import urllib2

src=''
url=''
print "finding four-letter @usernames on twitter..."
d_one=''
d_two=''
d_three=''
d_four=''
n_one=0
n_two=0
n_three=0
n_four=0
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']

while (n_one > 26):
    while(n_two > 26):
        while (n_three > 26):
            while (n_four > 26):
                d_one=letters[n_one]
                d_two=letters[n_two]
                d_three=letters[n_three]
                d_four=letters[n_four]
                url = "twitter.com/" + d_one + d_two + d_three + d_four

                src=urllib2.urlopen(url)
                src=src.read()
                if (src.find('Sorry, that page doesn’t exist!') >= 0):
                    print "nope"
                    n_four+=1
                else:
                    print url
                    n_four+=1
            n_three+=1
            n_four=0
        n_two+=1
        n_three=0
        n_four=0
    n_one+=1    
    n_two=0
    n_three=0
    n_four=0

このコードを実行すると、次のエラーが返されました。

SyntaxError:29行目のファイルname.pyに非ASCII文字'\ xe2'がありますが、エンコードが宣言されていません。詳細については、 http://www.python.org/peps/pep-0263.html を参照してください。

そのリンクにアクセスしてさらに検索を行った後、ドキュメントの先頭に次の行を追加しました。

# coding: utf-8

これで、エラーは返されなくなりましたが、何も起きていないように見えます。行を追加しました

print src

これは各URLのhtmlを出力するはずでしたが、実行しても何も起こりませんでした。アドバイスをいただければ幸いです。

4

2 に答える 2

5

を使用して、過度のネストを取り除くことができますitertools.product

from itertools import product
for d_one, d_two, d_three, d_four in product(letters, repeat=4):
    ...

文字のリストを定義する代わりに、単に使用できますstrings.ascii_lowercase

使用しているプロトコル (http) を urlopen に伝える必要があります。

url = "http://twitter.com/" + d_one + d_two + d_three + d_four

また、存在しないページを取得した場合、urlopen は を発生させる404ため、ページのテキストを見るのではなく、それを確認する必要があります。

于 2012-08-13T04:13:10.503 に答える
1

さて、あなたは を初期化n_one=0してから、 loop を実行しますwhile (n_one > 26)。Python が最初に遭遇したとき、while (0 > 26)どれが明らかに false であるかを確認し、ループ全体をスキップします。

そして、ニブラーの答えが教えてくれるように、とにかくループを行うよりクリーンな方法があります。

于 2012-08-13T04:16:05.660 に答える