Я пытаюсь преобразовать код R в код Python. Есть текущая строка, с которой у меня проблемы. (фрагмент кода 1).

Я перепробовал все варианты запросов, и код Python создает пустой файл без содержимого.

Запросы, wget, urllib.requests и т. Д. И т. Д.

(1)

downloader = download.file(url = 'https://www.equibase.com/premium/eqbLateChangeXMLDownload.cfm',destfile = 'C:/Users/bnewell/Desktop/test.xml",quiet = TRUE)              # DOWNLOADING XML FILE FROM SITE
        unfiltered = xmlToList(xmlParse(download_file))         

( 2 )

import requests

URL = 'https://www.equibase.com/premium/eqbLateChangeXMLDownload.cfm'

response = requests.head(URL, allow_redirects=True)
2
Brendan Newell 7 Июл 2019 в 21:55

3 ответа

Лучший ответ
import requests, shutil

URL = 'https://www.equibase.com/premium/eqbLateChangeXMLDownload.cfm'

page = requests.get(URL, stream=True, allow_redirects=True,
                    headers={'user-agent': 'MyPC'})

with open("File.xml", "wb") as f:
    page.raw.decode_content = True

    shutil.copyfileobj(page.raw, f)

Вручную добавив заголовок user-agent в файл, по какой-то причине я не уверен.

Я использую shutil для загрузки необработанного файла, который можно заменить на page.iter_content

1
Joshua Nixon 7 Июл 2019 в 19:37

Попытаться на самом деле get запрос

import requests

URL = 'https://www.equibase.com/premium/eqbLateChangeXMLDownload.cfm'

response = requests.get(URL, headers={'allow_redirects':True})

Затем вы можете получить доступ к тому, что вы загружаете, с помощью response.raw, response.text, response.content и т. Д.

Для получения более подробной информации см. Фактические документы.

0
MichaelD 7 Июл 2019 в 19:01

Попробуйте что-то вроде этого:

import os
import requests

url = "htts://......"
r = requests.get(url , stream=True, allow_redirects=True)

if r.status_code != 200:
    print("Download failed:", r.status_code, r.headers, r.text)

file_path = r"C:\data\...."
with open(file_path, 'wb') as f:
    for chunk in r.iter_content(chunk_size=1024 * 8):
        if chunk:
            f.write(chunk)
            f.flush()
            os.fsync(f.fileno())

0
Ivan Vinogradov 7 Июл 2019 в 19:23