我正在编写一个脚本,它将根据以下内容从基本HTML页面中提取数据:
URL中的第一个参数在-90.0和90.0(含)之间浮动,第二个数字在-180.0和180.0(含)之间。该URL将引导您到一个页面,其中一个数字作为页面正文(例如,http://jawbone-virality.herokuapp.com/scanner/desert/-89.7/131.56/)。我需要在附加到URL的所有页面之间找到最大的病毒数。
所以,现在我打印出第一个和第二个数字,以及正文中的数字(我们称之为病毒式传播)。它只打印到控制台,每当我尝试将它写入文件时,它就会让我感到震惊并且我会收到错误。任何提示或我遗失的任何东西?我对Python很陌生,所以我不确定我是否遗漏了某些东西。
import shutil
import os
import time
import datetime
import math
import urllib
from array import array
myFile = open('test.html','w')
m = 5
for x in range(-900,900,1):
for y in range(-1800,1800,1):
filehandle = urllib.urlopen('http://jawbone-virality.herokuapp.com/scanner/desert/'+str(x/10)+'/'+str(y/10)+'/')
print 'Planet Desert: (' + str(x/10) +','+ str(y/10) + '), Virality: ' + filehandle.readlines()[0] #lines
#myFile.write('Planet Desert: (' + str(x/10) +','+ str(y/10) + '), Virality: ' + filehandle.readlines()[0])
myFile.close()
filehandle.close()
谢谢!
答案 0 :(得分:0)
写入文件时,您之前是否还有print语句?那么当你致电readlines()
时,你的问题就是Python advances the file pointer to the end of the file。对readlines()
的第二次调用将返回一个空列表,您对第一个元素的访问权将产生IndexError
。
请参阅此示例执行:
filehandle = urllib.urlopen('http://jawbone-virality.herokuapp.com/scanner/desert/0/0/')
print(filehandle.readlines()) # prints ['5']
print(filehandle.readlines()) # prints []
解决方案是将结果保存到变量中,然后使用它。
filehandle = urllib.urlopen('http://jawbone-virality.herokuapp.com/scanner/desert/0/0/')
res = filehandle.readlines()[0]
print(res) # prints 5
print(res) # prints 5
然而,正如评论中已经指出的那样,不需要在这里调用readlines()
,因为看起来网站的格式只是一个纯整数。因此,线的概念并不存在,或者至少不提供任何更多信息。所以,让我们放弃它来换取更简单的函数read()
(这里甚至不需要readline()
)。
filehandle = urllib.urlopen('http://jawbone-virality.herokuapp.com/scanner/desert/0/0/')
res = filehandle.read()
print(res) # prints 5
您的源代码中还有另一个问题。从你可以推导出的urllib.urlopen()
的用法来看,你使用的是Python 2.然而,在Python 2中,整数的分割处理方式与C或Java类似,它们会产生一个四舍五入到整数的整数。因此,您将拨打http://jawbone-virality.herokuapp.com/scanner/desert/-90/-180/
十次。
这可以通过以下方式解决:
from __future__ import division
str(x / 10.0)
和str(y / 10.0)
urllib2
希望我能提供帮助。