0

我正在构建一个执行以下操作的应用程序:

  • 从 .txt 文件中获取主机并将它们放入列表中
  • 下载每个网站的标题并将它们放入另一个列表
  • 将包含特定单词的行打印到包含时间戳、特定行和属于该行的 url 的日志文件中。

一切实际上工作正常,但我似乎无法将正在检查的 url 传递给其他函数以便可以使用它。

此链接中的代码:http: //pastebin.com/630FrspN

实际上将打印日志文件中的每个条目相同的 url ...如果我将日志文件(websiteheaders,url)放入 for 循环中,它将起作用,但它会在日志文件中打印一个条目,次数与我在我的 url 中的次数一样多主机文件。

我需要以某种方式将在 for 循环中检查的“url”传递给 logfile 函数......

可能是一个简单的答案,但我似乎找不到它。提前致谢。

编辑:我认为下面的代码是最相关的。

def headerophalen(websites):

    for url in websites:
        try:
            response = urllib2.urlopen(url)
            headers = str(response.info())
            websiteheaders.extend(headers.splitlines())
        except urllib2.HTTPError, error:
            print "Error opening URL: ", url, "HTTP Errorcode: ", error.code
            continue

    logfile(websiteheaders, url)
4

2 回答 2

3

You need to log the data inside the for loop. You could build a dict as ballsdotballs suggests in his answer, but it seems like just writing to your log each iteration makes more sense unless you need to use the processed information for something other than logging.

def headerophalen(websites):

    for url in websites:
        try:
            response = urllib2.urlopen(url)
        except urllib2.HTTPError, error:
            print "Error opening URL: ", url, "HTTP Errorcode: ", error.code
        else:
            logfile(url, str(response.info()).splitlines())
于 2012-12-17T19:22:26.577 回答
2

当您调用时logfile(websiteheaders, url), url 将只是您网站数组中的最后一个 url,因此这是唯一将记录在您的日志文件中的 URL。如果我是你,我会将 url->headers 信息保存在字典中并将其传递给你的日志文件。

尝试类似:

headers = {}

然后在你的循环中使用:

response = urllib2.urlopen(url)
headerlist = str(response.info())
headers[url] = headerlist.splitlines()

现在你有了一个字典,其中每个 url 都有一个标题列表。您可以将其传递给您的日志文件函数,然后根据需要记录它。

logfile(headers)

在http://docs.python.org/2/tutorial/datastructures.html阅读字典

编辑:修正了我的语法和拼写

于 2012-12-17T19:26:13.750 回答