“Do like readlines()”指向会话对象(Python)

2024-09-28 23:50:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这些页面需要一个会话。在

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()方法来实现a.get()

^{pr2}$

谢谢

当我尝试的时候

a.get(somePage).readlines()

我明白了

AttributeError: Response Object Doesn't have attribute readlines

Tags: 信息网页homegetdefpage关键字页面
3条回答

从文档中,请记住:

警告

iter_lines() is not reentrant safe. Calling this method multiple times >causes some of the received data being lost. In case you need to call it >from multiple places, use the resulting iterator object instead:

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

first_line = next(lines)

for line in lines:
    print(line)

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

^{pr2}$

有几种方法可以做到这一点,但大多数Requests-y方法是使用流式请求和Response.iter_lines()

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

for line in r.iter_lines(1024):
    # Do stuff on this line.

除了@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,而在python3上则需要一个本机字符串(默认为unicode)。在

相关问题 更多 >