如何打开名称由连续数字组成的网站页面(http://website/#.html)

时间:2011-04-17 02:28:01

标签: python

所以说我有这个

global a
a = 1       
def newre():
    global a
    a += 1

b = str(a)
print b
op = urlopen('http://website/' + b + '.html')
ops = op.read()

它不会起作用,因为它可能是在我猜的函数中,但你是如何制作的,这样每次运行时,那么b中的b将比以前高1?

5 个答案:

答案 0 :(得分:2)

为什么要使用全局变量和其他东西。这很简单,因为你的尝试有点像这样。

contents = []
for i in range(10): # or whatever
    url = 'http://website/' + str(i) + '.html'
    content = urlopen(url)
    contents.append(content)

另外,我建议你从一个好的Python教程开始。欢迎来到StackOverflow!

答案 1 :(得分:2)

查看正确缩进的代码,我会看到你想要做什么。我会为这个

使用python迭代器
class pageIter:

     def __init__(self):
          self.a = 0

     def __iter__(self):
          return (self)

     def next(self):
          """ Return the contents of the next page """          
          self.a += 1
          #when no more, raise StopIteration to terminate 
          op = urlopen('http://website/' + str(a) + '.html')
          return op.read()


it = pageIter()
for pageOp in it:
    # do something with the next page until something happens

(或只是简单地)

maxNums = ??
for a in range(1, maxNums):
     op = urlopen('http://website/'+str(a)+'.html')

答案 2 :(得分:0)

每次更改b时,您都需要更改a

是您发布的整个代码吗?看起来这里缺少一些东西,多次调用urlopen怎么样?

答案 3 :(得分:0)

from urllib2 import urlopen

def urlIter(url, pages):
    return (url.format(page) for page in pages)

for url in urlIter('http://website/{0}.html', range(1,20)):
    pg = urlopen(url).read()
    # do something with pg

答案 4 :(得分:0)

现在,使用生成器:

def new_url(base_url, maxim):
    i = 0
    while i < maxim:
        i = i+1
        yield base_url % i

然后你这样使用它:

indexes = 10
base_url = "http://website/%i.html"

for url in new_url(base_url, indexes):
    pg = urlopen(url).read()
    ............

如果您需要在不同时刻拨打电话并获取下一个连续名称,可以使用next()

gen_url = new_url(base_url, indexes)
url1 = next(gen_url)

.... do whatever here ....

#when you need it, you get a new url calling next():
url2 = next(gen_url)