Как скачать файл xlsx из сети в Python - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь загрузить файл Excel с этого сайта.но, к сожалению, мой код не может загрузить файл Excel.Есть кнопка загрузки, так или иначе, я нажимаю эту кнопку из python.Пожалуйста, проверьте мой код:

 import requests
 from bs4 import BeautifulSoup as BS
 from selenium import webdriver
 from fake_useragent import UserAgent

 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'}

 driver = webdriver.Chrome('chromedriver_win32\chromedriver')


 page = 'https://data.world/makeovermonday/2019w16'

 driver.get(page)


 inputElement = driver.find_element_by_id("fileactions.files.download")
 #inputElement.clear()
 #inputElement.send_keys(company)
 inputElement.submit()

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Простейшим способом продвижения вперед будет использование Python SDK .

В качестве альтернативы, вы можете использовать requests и загрузить набор данных с помощью вызова API. Посмотрите на эти конечные точки:

https://apidocs.data.world/toolkit/api/api-endpoints/datasets/downloaddataset https://apidocs.data.world/toolkit/api/api-endpoints/files/downloadfile

Пример первого:

url = 'https://api.data.world/v0/download/makeovermonday/2019w16'
headers = {'Authorization': 'Bearer my-token-from-https://data.world/integrations/python'}
r = requests.get(url, headers=headers)
with open('dataset.zip', 'wb') as f:
    f.write(r.content)
0 голосов
/ 17 апреля 2019

Вы ожидаете, что загрузка начнется после нажатия кнопки с пиктограммой, но на ней отображается только всплывающая панель с кнопкой фактической загрузки. Чтобы начать загрузку, вы должны нажать на эту кнопку.

Во-первых, submit() работает только на формах. На данной странице кнопка загрузки не может быть отправлена. Вы должны использовать click().

Второе, После нажатия на первую кнопку отображается всплывающее модальное окно со ссылкой на скачивание. Вы должны нажать на эту кнопку, чтобы начать загрузку. Вы должны нажать на следующий элемент, чтобы начать загрузку.

driver.find_element_by_css_selector("div.open > ul > li > a");
0 голосов
/ 17 апреля 2019

Мне показалось, что все в порядке:

import requests
from bs4 import BeautifulSoup as BS
from selenium import webdriver
from fake_useragent import UserAgent
import time

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'}

driver = webdriver.Chrome('C:/chromedriver_win32/chromedriver.exe')

page = 'https://data.world/makeovermonday/2019w16'

driver.get(page)
driver.execute_script("window.scrollTo(0, 400)") 

dropdownElement = driver.find_element_by_id("fileactions.files.download")
dropdownElement.click()

downloadElement = driver.find_element_by_xpath("/html/body/div[3]/div/ul/li/a/div[2]/div")
downloadElement.click()
...