Я пытаюсь найти способ экспортировать электронную таблицу Microsoft Excel (.xlsx) с веб-сайта и сохранить ее локально (на рабочем столе) или в базе данных. Я могу проанализировать URL-адрес с табличным содержимым и отобразить/записать в файл, но мне нужно определить способ получения содержимого электронной таблицы, требующего нажатия кнопки для загрузки данных. Что еще более важно, мне нужно иметь возможность извлекать данные электронных таблиц, встроенные в несколько отдельных страниц, как они отображаются на веб-странице. Ниже приведен пример сценария, который отображает табличные данные с веб-сайта.
import urllib3
from bs4 import BeautifulSoup
url = 'https://www.runnersworld.com/races-places/a20823734/these-are-the-worlds-fastest-marathoners-and-marathon-courses/'
http = urllib3.PoolManager()
response = http.request('GET', url)
soup = BeautifulSoup(response.data.decode('utf-8'))
print(soup)
Я проверил инструмент Javascript, который является эквивалентом ручного экспорта данных на веб-сайт с помощью нажатия кнопки, но мне нужно найти способ автоматизировать это с помощью сценария Python... любая помощь будет очень признательна.
@Bindestrich - Спасибо за предложение, проведя еще несколько исследований, выяснилось, что Selenium и веб-драйвер могут быть особенно полезны. Я буду продолжать копаться в этом больше, но это помогает!
где кнопка скачать таблицу?
@SergeyK - я не могу предоставить точный URL-адрес, поскольку для этого требуется определенный сертификат, но я просто пытаюсь продемонстрировать, как нажать на опцию, чтобы загрузить файл/хранилище локально. В качестве примера, вот ссылка для сохранения/загрузки файла .mp4 нажатием кнопки (online-video-cutter.com/crop-video), поэтому я просто пытаюсь настроить использование Python для сохранения данных. хранятся на веб-сайтах.
@ mdl518 мне нужны эти данные, чтобы помочь тебе в твоем вопросе, мб эта кнопка после аутентификации
@SergeyK - Вот ссылка на сайт с данными. Мне нужно найти способ загрузить CSV-файл, указанный в разделе «Запуск» по этому URL-адресу: Browsestack.com/test-on-the-right-mobile-devices
Судя по вашему комментарию
@SergeyK - Вот ссылка на сайт с данными. Мне нужно найти способ загрузки CSV-файла, указанный в разделе «Запуск» этот URL: Browsestack.com/test-on-the-right-mobile-devices
На упомянутом вами сайте есть три кнопки загрузки. Да, они одинаковые, и будет загружен только один файл, но в качестве примера.
import requests
from bs4 import BeautifulSoup
import urllib.parse
response = requests.get('https://www.browserstack.com/test-on-the-right-mobile-devices')
for csv_href in BeautifulSoup(response.text, 'lxml').find_all('div', class_='download-csv'):
link = 'https://www.browserstack.com/' + csv_href.findNext('a').get('href')
file_name = urllib.parse.unquote(link).replace(" ", "").split('/')[-1]
data = requests.get(link)
with open(file_name, 'wb') as file:
print(f'{file_name} saved from {link}')
file.write(data.content)
ВЫХОД
BrowserStack-Listofdevicestoteston.csv saved from https://www.browserstack.com/downloads/BrowserStack%20-%20List%20of%20devices%20to%20test%20on.csv
BrowserStack-Listofdevicestoteston.csv saved from https://www.browserstack.com/downloads/BrowserStack%20-%20List%20of%20devices%20to%20test%20on.csv
BrowserStack-Listofdevicestoteston.csv saved from https://www.browserstack.com/downloads/BrowserStack%20-%20List%20of%20devices%20to%20test%20on.csv
Или просто раздел «Запуск» без цикла:
soup = BeautifulSoup(response.text, 'lxml').find('div', {'data-trigger': 'startingup'})
link = 'https://www.browserstack.com/' + soup.findNext('a').get('href')
@SergeiK — Это решение отлично работает! Более того, мне нужно расширить эту концепцию, чтобы при нажатии кнопки открывалось всплывающее окно с тремя опциями, включая одну «Экспорт электронной таблицы», которая предлагает загрузку. Можно ли расширить сценарий до этого всплывающего окна, предоставляющего возможность загрузки данных? В противном случае я соглашусь с вашим ответом как с правильным решением, еще раз спасибо!
@mdl518 mdl518 Мне нужно заглянуть на сайт и рассказать, как это сделать правильно, я не могу просто сказать: «Да, скрипт можно расширить». Мб без селениума нельзя, или API, или еще что…
@SergeiK - я не могу предоставить точный URL-адрес, поскольку для доступа к странице в Интернете требуется специальный сертификат, но я могу попытаться найти аналогичный веб-сайт, который требует той же функциональности для нажатия кнопки, чтобы вызвать другое всплывающее окно. для загрузки данных. В остальном я согласился с вашим ответом как с правильным решением для моего первоначального сообщения, еще раз спасибо!
@ mdl518 предложите подобное, я добавляю решение к этому ответу
если вам нужно щелкнуть что-то, вам нужно использовать инструмент автоматизации браузера, такой как Selenium, Puppeteer или Playwright.