从python中的Web服务URL下载XML文件

时间:2018-10-31 14:09:45

标签: python xml web-services

如果我是python的初学者,请纠正我的错误。

我有一个包含XML文件的Web服务URL:

http://abc.tch.xyz.edu:000/patientlabtests/id/1345

我有一个值列表,我想将该列表中的每个值附加到URL并为每个值下载文件,并且下载文件的名称应与从列表中附加的值相同。

可以一次下载一个文件,但是列表中有1000个值,并且我试图编写一个带for循环的函数,但被卡住了。

x = [ 1345, 7890, 4729]
for i in x :
     url = http://abc.tch.xyz.edu:000/patientlabresults/id/{}.format(i)
     response = requests.get(url2)

      ****** Missing part of the code ********

        with open('.xml', 'wb') as file:
        file.write(response.content)
        file.close()

从URL下载的文件应该类似于

"1345patientlabresults.xml"
"7890patientlabresults.xml"
"4729patientlabresults.xml"

我知道代码的一部分丢失了,我无法填写该部分。如果有人可以帮助我,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

访问您的Web服务URL似乎不起作用。检查一下。

import requests


x = [ 1345, 7890, 4729]
for i in x :
    url2 = "http://abc.tch.xyz.edu:000/patientlabresults/id/"
    response = requests.get(url2+str(i)) # i must be converted to a string

注意:当您使用“ with”打开文件时,由于文件将自动关闭,因此您没有关闭文件。

with open(filename, mode) as file:
    file.write(data)

由于您提供的网址无效,因此我将使用其他网址。我希望您能了解这个想法,以及如何使用自定义名称写入文件

import requests

categories = ['fruit', 'car', 'dog']

for category in categories :
    url = "https://icanhazdadjoke.com/search?term="
    response = requests.get(url + category)
    file_name = category + "_JOKES_2018" #Files will be saved as fruit_JOKES_2018

    r = requests.get(url + category)
    data = r.status_code #Storing the status code in 'data' variable

    with open(file_name+".txt", 'w+') as f:
        f.write(str(data)) # Writing the status code of each url in the file

运行此代码后,状态代码将写入每个文件中。该文件还将被命名为:

  • car_JOKES_2018.txt
  • dog_JOKES_2018.txt
  • fruit_JOKES_2018.txt

我希望这能使您了解如何命名文件以及如何写入文件。

答案 1 :(得分:0)

我认为您只是想使用str.format来创建路径,因为您(几乎)都使用URL。也许像下面这样

import os.path
x = [ 1345, 7890, 4729]
for i in x:
     path = '1345patientlabresults.xml'.format(i)
     # ignore this file if we've already got it
     if os.path.exists(path):
       continue

     # try and get the file, throwing an exception on failure
     url = 'http://abc.tch.xyz.edu:000/patientlabresults/id/{}'.format(i)
     res = requests.get(url)
     res.raise_for_status()

     # write the successful file out
     with open(path, 'w') as fd:
       fd.write(res.content)

我在重试中添加了一些错误处理和更好的行为