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

有人可以帮忙吗?

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

2 回答 2

6

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

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

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

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

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

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

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

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

[1] 我使用窗户。它在文本文件中添加了许多看不见的东西。如果我用“wb”而不是“w”打开要写入的文件,则内容将在没有看不见的 /n 的情况下写入

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

非常感谢大家,我希望这可以帮助某人。

保罗。

于 2013-02-02T07:56:56.407 回答
2

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

结果 = '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)(见这里)一样
于 2013-02-01T15:41:55.843 回答