如何在Python中不断地从URL中提取数据?



我有一个链接,例如www.someurl.com/api/getdata?password=…,当我在web浏览器中打开它时,它会发送一个不断更新的文本文档。我想在Python中建立一个相同的连接,并在接收到这些数据时将其实时转储到文件中。我尝试过使用requests.Session(),但是由于数据流永远不会结束(并且删除它会丢失数据),因此get请求也永远不会结束。

import requests
s = requests.Session()
x = s.get("www.someurl.com/api/getdata?password=...") #never terminates

这样做的正确方法是什么?

我找到了我在这里寻找的答案:Python从API请求流数据

全面实施:

import requests
url = "www.someurl.com/api/getdata?password=..."
s = requests.Session()
with open('file.txt','a') as fp:
with s.get(url,stream=True) as resp:
for line in resp.iter_lines(chunk_size=1):
fp.write(str(line))

注意,chunk_size=1对于数据立即响应新的完整消息是必要的,而不是在遍历所有行之前等待内部缓冲区填满。我相信chunk_size=None是为了做到这一点,但它不适合我。

你可以继续向url发送get请求

import requests
import time
url = "www.someurl.com/api/getdata?password=..."
sess = requests.session()
while True:
req = sess.get(url)
time.sleep(10)

这将在1秒后终止请求,

import multiprocessing
import time
import requests
data = None
def get_from_url(x):
s = requests.Session() 
data = s.get("www.someurl.com/api/getdata?password=...")    
if __name__ == '__main__':
while True: 
p = multiprocessing.Process(target=get_from_url, name="get_from_url", args=(1,))
p.start()
# Wait 1 second for get request
time.sleep(1)
p.terminate()
p.join()

# do something with the data 
print(data) # or smth else

最新更新