题目就只有一张图片。 照着惯例,这种情况直接察看源代码吧。发现有这样的提示:
<!-- urllib may help. DON'T TRY ALL NOTHINGS, since it will never | |
end. 400 times is more than enough. --> |
好吧。 应该是需要重复某动作400次的意思。回到页面,目测只有图片可以点击。try,得到下列提示:
and the next nothing is 44827
一看见next字眼就甚是激动呵。 虽然不太明显,但本着做这些题基本靠猜的原则,应该就是把44827粘贴到url吧,再点击。又得到新的数字,估计意思应该就是重复取400次吧。OK,coding开始。首先我想到的是urllib去抓取next nothing is后的数字,然后改变url,反复400次:
import urllib2
urlAdrBase = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
#offset is get from each open url
urlOffset = '12345'
#400 times
for i in range(399):
f = urllib2.urlopen(urlAdrBase + urlOffset)
data = f.read()
#use split method to get the numnber
urlsplit = data.split()
urlOffset = urlsplit[5]
print(urlAdrBase + urlOffset)
urlOffset = urlsplit[5]
IndexError: list index out of range
猜测可能是读到最后一次循环时获取到了最终的URL地址。重新读了一下题目的提示,发现提示并没有说需要循环400次,而是说400次足以。好吧。 需要对循环结束的条件作重新定义,为了验证自己的猜测,所以简单的加了一个异常处理:
import urllib2
urlAdrBase = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
#offset is get from each open url
urlOffset = '12345'
#400 times
for i in range(399):
f = urllib2.urlopen(urlAdrBase + urlOffset)
data = f.read()
#use split method to get the numnber
urlsplit = data.split()
try:
urlOffset = urlsplit[5]
except :
print(data)
break
print(urlAdrBase + urlOffset)
得到:
peak.html
http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=66831
[Finished in 86.7s]
这样子做的编程上很简单,用到string.split()对字符串做一个分片处理就可以很轻松的将末尾的数字提取出来,当然了,因为这个程序需要读取网页,因此运行时间会比较长。
ok,通往下一关:http://www.pythonchallenge.com/pc/def/peak.html