2

編集:(解決済み)ファイルから値を読み取っているときに、改行文字が最後に追加されます.(\n)これは、その時点でリクエスト文字列を分割しています. そもそも値をファイルに保存した方法に関係していると思います。どうもありがとう。

私は次のコードを持っています:

results = 'http://www.myurl.com/'+str(mystring)
print str(results)
request = urllib2.Request(results)
request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)')
opener = urllib2.build_opener()
text = opener.open(request).read()

これはループしています。ループが数回実行された後、 str(mystring) が変更され、異なる結果セットが得られます。str(mystring) の値を一定に保つのが好きなだけ何度でもスクリプトをループできますが、str(mystring) の値を変更するたびに、コードがオープナーをビルドしようとすると、ホストが指定されていないというエラーが表示されます。

opener = urllib2.build_opener()

誰でも助けてもらえますか?

ティア、

ポール。

編集:

ここでより多くのコード.....

import sys
import string
import httplib
import urllib2
import re
import random
import time


def StripTags(text):
    finished = 0
    while not finished:
        finished = 1
        start = text.find("<")
        if start >= 0:
            stop = text[start:].find(">")
            if stop >= 0:
                text = text[:start] + text[start+stop+1:]
                finished = 0
    return text
mystring="test"

d={}

    with open("myfile","r") as f:
        while True:
            page_counter=0
            print str(mystring)

            try:
                while page_counter <20:
                    results = 'http://www.myurl.com/'+str(mystring)
                    print str(results)
                    request = urllib2.Request(results)
                    request.add_header('User-Agent','Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)')
                    opener = urllib2.build_opener()
                    text = opener.open(request).read()
                    finds = (re.findall('([\w\.\-]+'+mystring+')',StripTags(text)))
                    for find in finds:
                        d[find]=1
                        uniq_emails=d.keys()
                    page_counter = page_counter +1
                    print "found this " +str(finds)"
                    random.seed()
                    n = random.random()
                    i = n * 5
                    print "Pausing script for " + str(i) + " Seconds" + ""
                    time.sleep(i)
                mystring=next(f)
            except IOError:
                print "No result found!"+""
4

2 に答える 2

6

私は答えを見つけました。それは次のとおりです....

mystring の値はファイルから読み込まれました。ファイルを書き込むために書いたスクリプトでは、「wb」ではなく「w」でファイルを開きます。

ファイルの各行は、改行文字「/n」で終わります。

mystring が文字列リクエストに追加されたとき、リクエスト文字列の途中で新しい行が作成されていました。[1]

結果を取得するために使用している実際の URL を隠すために、ここに投稿するようにコードを変更したため、これは私のコードからは決して明らかではありませんでした.[2]

私の実際のURLは次のようになります.....

Myurl.com/mystring/otherstuff/page_counter/morestuff.htm

ファイルから読み取られる /n が私の URL を接合し、urllib の問題を引き起こしました......

[1] Windows を使用しています。テキストファイルに多くの目に見えないものを追加します。「w」の代わりに「wb」を使用して書き込むファイルを開いた場合、内容は目に見えない /n なしで書き込まれます。

[2] 常に完全なコードを投稿してください。スタックオーバーフローの善良な人々は、あなたが何をしているかを見られない限り、あなたを助けることはできません.....

どうもありがとう、これがいつか誰かを助けることを願っています。

ポール。

于 2013-02-02T07:56:56.407 に答える
2

while ループでは、結果を URL ではないものに設定しています。

結果 = 'myurl+str(mystring)'

それはおそらく results = myurl+str(mystring)

ちなみに、string ( str()) へのすべてのキャストは必要ないようです: (要リクエストで拡張)

  • print str(foo): そのような場合、 str() は必要ありません。Python は常にfoo's文字列表現を出力します
  • results = 'http://www.myurl.com/'+str(mystring). これも不要です。mystringすでに文字列なので、'http://www.myurl.com/' + mystring十分です。
  • print "Pausing script for " + str(i) + " Seconds". ここでは、str()string + int を実行できないため、エラーが発生します。ただし、print "foo", 1, "bar"機能します。と同様print "foo %i bar" % 1print "foo {0} bar".format(1)(ここを参照)
于 2013-02-01T15:41:55.843 に答える