1

我想从一些网页中挑出几行信息。我想要(或者我想要)打开网页,遍历行,检查每个关键字,当我找到它时复制我想要的信息。

这些页面需要一个会话。

def getpage()
    home = 'website'
    exstension1 = '/input/page'
    extension2 = '/output/page'
    indexnumber = '11100'

    sess = requests.Session()
    getter = sess.get(home+extension1)
    payload = {'foo':'bar','indexnumber':indexnumber}
    getter = sess.post(home+extension2,data=payload)

    return sess

正如我试图在标题中所说,我需要一个 readlines() 方法用于 .get()

a.get(somePage)###Now could I put...###.readlines()
####or
a.get(somePage).text.readlines()###?
###I don't think I want the following, for performance reasons, correct me if I am wrong
F = open(someNewFile,mode='w')
F.write(a.get(somePage).text)
F.close()
F = open(thatFileIJustMade).readlines()###All that just to turn it into a File on which I can use readlines?

谢谢

当我尝试

a.get(somePage).readlines()

我明白了

AttributeError: Response Object Doesn't have attribute readlines
4

3 回答 3

9

有几种方法可以做到这一点,但最适合请求的方法是使用流式请求以及Response.iter_lines()

r = requests.get(somePage, stream=True)

for line in r.iter_lines(1024):
    # Do stuff on this line.
于 2013-09-21T08:01:32.890 回答
3

除了@Lukasa 出色且完全正确的方法之外,您还可以执行以下操作:

import io

r = requests.get(some_page)
file_like_obj = io.StringIO(r.text)
lines = file_like_obj.readlines()

请注意,这r.text绝对是在 Response 对象上使用的正确属性,因为在 Python2 上它将需要 unicode,而在 Python 3 上则需要本机字符串(默认情况下是 unicode)。

于 2013-09-21T13:48:16.000 回答
0

从文档中,请记住:

警告

iter_lines() 不是可重入安全的。多次调用此方法 > 会导致部分接收到的数据丢失。如果您需要从多个位置调用它,请改用生成的迭代器对象:

lines = r.iter_lines()
# Save the first line for later or just skip it

first_line = next(lines)

for line in lines:
    print(line)

为了简单起见,我使用以下方法:

r = requests.get(somePage).text
r_lines = r.split("\n")

for line in r_lines:
    #line logic goes here
于 2016-06-19T18:03:33.023 回答