urllib2错误没有主机给出

时间:2013-02-01 15:15:40

标签: python string urllib2

编辑:(已解决)当我从我的文件中读取值时,会在最后添加换行符。(\ 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)的值时,我得到一个错误,说明当代码尝试构建开启器时没有给出主机。< / p>

opener = urllib2.build_opener()

有人可以帮忙吗?

TIA,

保罗。

编辑:

这里有更多代码.....

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

2 个答案:

答案 0 :(得分:6)

我找到了答案。它如下......

从文件中读入mystring的值。 在我编写的脚本中,我用“w”而不是“wb”打开文件。

文件中的每一行都以换行符“/ n”结束。

当mystring被添加到字符串请求时,在请求字符串的中间创建了新行。[1]

这在我的代码中永远不会显而易见,因为我将其更改为在此处发布,以隐藏我用来获取结果的真实网址。[2]

我的实际网址看起来更像......

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

从文件中读取的/ n拼接了我的网址并给了urllib问题......

[1]我使用的是Windows。它为文本文件添加了许多看不见的东西。如果我用“wb”而不是“w”打开要写入的文件,那么内容将被写入而没有看不见/ n

[2]总是发布你的完整代码孩子。 stackoverflow的好人无法帮助你,除非他们能看到你在做什么.....

非常感谢所有人,我希望这会在某些时候帮助某人。

保罗。

答案 1 :(得分:2)

在while循环中,您将结果设置为不是网址的内容:

results ='myurl + str(mystring)'

应该是results = myurl+str(mystring)

顺便说一句,看起来你不需要所有的转换为字符串(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)一样(请参阅here