2013-02-01 54 views
2

編輯:(求助)當我從我的文件中讀取值時,新行字符被添加到結尾(\ n)這是我的請求字符串在該點分裂。 我認爲這是關於如何將值保存到文件中的。非常感謝。urllib2錯誤沒有給出主機

我有我有以下代碼:

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() 

任何人都可以幫忙嗎?

TIA,

Paul。

編輯:這裏

更多代碼.....

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!"+"" 
+1

當你改變它時,mystring的值是多少? – dm03514

+0

這只是一個不同的搜索術語。他們都是單個單詞,都很統一。我可以用任何我喜歡mystring的值來啓動腳本。當我嘗試通過我的代碼更改數值時出現問題 –

+2

請您舉一個完整的示例,不可能在沒有看到您的代碼的情況下猜出問題所在 –

回答

2

在while循環,你設置結果的東西是不是一個網址:

結果=' myurl + STR(MyString的)」

這也許應該是results = myurl+str(mystring)

順便說一句,似乎沒有必要對所有的鑄件串(str())你這樣做: (擴大了要求

  • print str(foo):在這種情況下,STR()將沒有必要。 Python將始終打印foo's字符串表示形式
  • results = 'http://www.myurl.com/'+str(mystring)。這也是不必要的; 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)(見here
+0

myurl編輯。它不是我正在使用的實際url .....我不是真的想放棄真正的網址..代碼的那部分工作正常。 –

+0

@Paul:不過,你在引號裏面加了'+ str(..)'東西。這不會做字符串連接。 – Junuxx

+0

是的,我意識到這一點。真正的代碼沒有。我現在編輯它......我不確定你所說的所有的字符串是什麼意思。如果你能給我一個更好的方法,我會很感激。 TIA。 –

5

我找到了答案。它如下所示。

mystring的值是從文件讀入的。 在寫我寫的文件中,我用「w」而不是「wb」打開它。

文件中的每一行以換行符「/ n」結尾。

將mystring添加到字符串請求時,會在請求字符串的中間創建新行[1]。

這從來不會從我的代碼中顯而易見,因爲我將其更改爲在此處發佈以努力隱藏我用於獲取結果的真實網址。[2]

我實際的URL看起來更像這個.....

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

的/ n是從文件中讀取我的拼接url並給了urllib問題......

[1]我用windows。它爲文本文件添加了許多看不見的東西。如果我打開文件以寫入「wb」而不是「w」,則內容將被寫入,而不會出現看不見的/ n

[2]始終發佈您的完整代碼的孩子。如果你不知道你在做什麼,那麼這個好的人不能幫助你......

非常感謝所有人,我希望這可以幫助某人在某個時間點。

Paul。

相關問題