Web Scraping этот сайт, чтобы получить вывод - PullRequest
0 голосов
/ 11 ноября 2019

Есть этот сайт https://colinhume.com/music.aspx, который принимает определенный ввод и преобразует его в выходной файл.

Допустим, ввод:

X: 7
T:As Luck Will Have It
% Nottingham Music Database
S:John Lagden, via EF
M:6/8
K:D
E|"D"F3 "A7/c+"A2G|"Bm"FGF "A7"E3|"D"F2A d2c|"G"BcB "D"A3|"G"G2B "A7"A2G|\
"D"F2A d2f|
"G"efe "E7"dcB|"A7"ABA GFE|"D"F3 "A7/c+"A2G|"Bm"FGF "A7"E3|"D"F2A d2c|
"G"BcB "D"A3|"G"G2B "A7"A2G|"D"F2E "Bm"D2F|"Em"EFG "A7"F2E|"D"D3 -D2||
A|"D"d3 fed|"A"c2d e2A|"Bm"Bcd c2B|"F#m"A3 A2A|"G"B3 dcB|
"D"A2d f2a|"G"agf "E7"fed|"A7"e3 e2A|"D"d3 fed|"A"c2B A2A|
"Bm"B3 dcB|"F#m"A3 A2F|"G"G3 BAG|"D"F2A d2D|"Em"EFG "A7"F2E|"D"D3 -D2||

Когда вы нажимаетена кнопке «Преобразовать» есть выходная страница с кнопкой «Воспроизвести» вверху. Когда вы нажимаете кнопку, загружается MIDI-файл.

Теперь, возможно ли, чтобы весь этот процесс выполнялся автоматически с помощью кода Python, который сохраняет MIDI-файл на моем ПК?

Мне нужен этот код как часть проекта, который должен автоматически преобразовывать этот тип ввода в формат midi. Я перепробовал много офлайн-кодов, но ни один из них не работает должным образом.

Так что я надеюсь, что смогу сделать это с помощью веб-скрапинга.

Примечание: ввод должен быть в определенном формате, поэтому вставьте приведенный выше текст, как он есть на сайте.

1 Ответ

1 голос
/ 11 ноября 2019

Вам нужно будет импортировать селен модуль, чтобы запустить это. Также вам необходимо иметь на своем пути хромедривер . Возможно, вы уже сделали это, так как упомянули о веб-очистке.

РЕДАКТИРОВАТЬ: код теперь не отображает GUI и загружает файл в ту же папку скрипта py.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import os

options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(chrome_options=options)
download_path = os.path.dirname(__file__)
driver.command_executor._commands["send_command"] = ("POST", '/session/$sessionId/chromium/send_command')
params = {'cmd':'Page.setDownloadBehavior', 'params': {'behavior': 'allow', 'downloadPath': download_path}}
driver.execute("send_command", params)    

song = """X: 7
T:As Luck Will Have It
% Nottingham Music Database
S:John Lagden, via EF
M:6/8
K:D
E|"D"F3 "A7/c+"A2G|"Bm"FGF "A7"E3|"D"F2A d2c|"G"BcB "D"A3|"G"G2B "A7"A2G|\
"D"F2A d2f|
"G"efe "E7"dcB|"A7"ABA GFE|"D"F3 "A7/c+"A2G|"Bm"FGF "A7"E3|"D"F2A d2c|
"G"BcB "D"A3|"G"G2B "A7"A2G|"D"F2E "Bm"D2F|"Em"EFG "A7"F2E|"D"D3 -D2||
A|"D"d3 fed|"A"c2d e2A|"Bm"Bcd c2B|"F#m"A3 A2A|"G"B3 dcB|
"D"A2d f2a|"G"agf "E7"fed|"A7"e3 e2A|"D"d3 fed|"A"c2B A2A|
"Bm"B3 dcB|"F#m"A3 A2F|"G"G3 BAG|"D"F2A d2D|"Em"EFG "A7"F2E|"D"D3 -D2||"""

driver.get("https://colinhume.com/music.aspx")
input_element = driver.find_element_by_id("InBox")
input_element.send_keys(song)

button_element = driver.find_element_by_id("ConvBtn")
button_element.click()

button_elements = driver.find_elements_by_class_name("Button")
for button_element in button_elements:
    if button_element.text == "Play":
            driver.get(button_element.find_element_by_tag_name("a").get_attribute("href"))
            break
...