0

一度に 100 行ずつ Web サイトからソース コードを読み取ろうとしています。

例えば:

self.code = urllib.request.urlopen(uri)

#Get 100 first lines
self.lines = self.getLines()

...

#Get 100 next lines
self.lines = self.getLines()

私の getLines コードは次のようになります。

def getLines(self):
    res = []
    i = 0

    while i < 100:
        res.append(str(self.code.readline()))
        i+=1

return res

しかし問題は、getLines()常にコードの最初の 100 行を返すことです。

next()ortell()とを使用したいくつかのソリューションを見てきましseek()たが、これらの関数は HTTPResponse クラスに実装されていないようです。

4

2 に答える 2

3

ドキュメント によると、urllib.request.urlopen(uri)オブジェクトのようなファイルが返されるので、次のことができるはずです。

from itertools import islice

def getLines(self)
    res = []
    for line in islice(self.code,100): 
        res.append(line)
    return res

itertoolsisliceのドキュメントに詳細があります。イテレータを使用すると、ループと手動の増分を回避できます。while

どうしても使用する必要がある場合は、ループreadline()を使用することをお勧めします。for

for i in xrange(100): 
    ... 
于 2012-04-20T16:17:29.507 に答える
0

これは私のために働いた。

#!/usr/bin/env python

import urllib

def getLines(code):
    res = []
    i = 0

    while i < 100:
        res.append(str(code.readline()))
        i+=1

    return res

uri='http://www.google.com/'
code = urllib.urlopen(uri)

#Get 100 first lines
lines = getLines(code)

print lines

#Get 100 next lines
lines = getLines(code)

print lines
于 2012-04-20T16:20:58.577 に答える