2016-07-21 20 views
0

Here ist die Seite, die ich versuche, dies zu tun. Es sind die Sprachleitungen von GLaDOS von Portal. Jede Zeile ist innerer "ich" HTML-Text sowie zwischen Anführungszeichen wie auf der Seite angezeigt. Sie haben jeweils einen direkten Download-Link mit der Aufschrift "Download". Ich versuche, die Stimmen in den MARY TTS Sprachsynthesizer here in einem von zwei Formaten zu bringen. Entweder jede Zeile in einer eigenen Textdatei mit dem Dateinamen, der dem Namen der WAV-Dateien entspricht, oder alle in einer Textdatei formatiert als (Dateiname "Zeile hier einfügen").Loop durch eine Seite von Sprachproben, Herunterladen jeder Probe und setzen Sie die Zeilen in eine Textdatei

Ich habe versucht, dies selbst zu tun, aber ich habe bereits 4 Stunden damit verbracht und habe nur ein kleines Stück Python-Code, der nicht funktioniert.

from bs4 import BeautifulSoup 
import re 
import urllib.request 
soup = BeautifulSoup(urllib.request.urlopen("http://theportalwiki.com/wiki/GLaDOS_voice_lines"), "html.parser") 
tags = soup.find_all('i') 
f = open('Lines.txt', 'w') 
for t in range(len(tags)): 
    f.write(tags[t] + '\n') 

f.close() 

Es gibt "Typeerror: nicht unterstützte Operandtyp (e) für +:. 'Tag' und 'str'"

Ich habe auch AutoHotKey versucht.

^g:: 

IEGet(Name="")  ;Retrieve pointer to existing IE window/tab 
{ 
    IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame 
     Name := (Name="New Tab - Windows Internet Explorer") ? "about:Tabs" 
     : RegExReplace(Name, " - (Windows|Microsoft) Internet Explorer") 
    For wb in ComObjCreate("Shell.Application").Windows 
     If (wb.LocationName = Name) && InStr(wb.FullName, "iexplore.exe") 
      Return wb 
} ;written by Jethrow 

wb := IEGet() 

IELoad(wb) ;You need to send the IE handle to the function unless you define it as global. 
{ 
    If !wb ;If wb is not a valid pointer then quit 
     Return False 
    Loop ;Otherwise sleep for .1 seconds untill the page starts loading 
     Sleep,100 
    Until (wb.busy) 
    Loop ;Once it starts loading wait until completes 
     Sleep,100 
    Until (!wb.busy) 
    Loop ;optional check to wait for the page to completely load 
     Sleep,100 
    Until (wb.Document.Readystate = "Complete") 
Return True 
} 

For IE in ComObjCreate("Shell.Application").Windows ; for each open window 
If InStr(IE.FullName, "iexplore.exe") ; check if it's an ie window 
break ; keep that window's handle 
; this assumes an ie window is available. it won't work if not 

IE.Navigate("http://theportalwiki.com/wiki/GLaDOS_voice_lines") 
While IE.Busy 
    Sleep, 100 
Links := IE.Document.Links 

Inner := FileOpen("C:\Users\Johnson\Desktop\GLaDOS Voice", "w") 
Rows := IE.Document.All.Tags("table")[4].Rows 
    Loop % Rows.Length 
     Inner.Write(Row[A_Index].InnerText . "`r`n") 

Inner.Close() 
Return 

Soweit ich das beurteilen kann, funktioniert das Skript AutoHotKey absolut nichts. Ich benutze den Hotkey und nichts passiert.

Ich würde Lua bevorzugen, weil es konsistent ist und ich es verstehe.

Antwort

1

Ihr Python-Code ist sehr nahe an der Arbeit. Minor fix (plus einen Kontext-Manager für die Datei) unter:

from bs4 import BeautifulSoup 
import urllib.request 
soup = BeautifulSoup(urllib.request.urlopen("http://theportalwiki.com/wiki/GLaDOS_voice_lines"), "html.parser") 
tags = soup.find_all('i') 
with open('Lines.txt', 'w') as f: 
    for t in range(len(tags)): 
     f.write(tags[t].text.strip('“”') + '\n') 

Lines.txt:

You just have to look at things objectively, see what you don't need anymore, and trim out the fat. 
Portal 
Portal 2 

Hello and, again, welcome to the Aperture Science computer-aided enrichment center. 
... 

EDIT

Um die Frage im Kommentar unten zu beantworten, sollte dies Holen Sie sich die Download-Links:

from bs4 import BeautifulSoup 
import urllib.request 
soup = BeautifulSoup(urllib.request.urlopen("http://theportalwiki.com/wiki/GLaDOS_voice_lines"), "html.parser") 
tags = soup.find_all('a') 
with open('Downloads.txt', 'w') as f: 
    for tag in tags: 
     if tag.text == 'Download': 
      f.write(tag['href'] + '\n') 

Downloads.tx t:

http://i1.theportalwiki.net/img/e/e5/GLaDOS_00_part1_entry-1.wav 
http://i1.theportalwiki.net/img/d/d7/GLaDOS_00_part1_entry-2.wav 
http://i1.theportalwiki.net/img/5/50/GLaDOS_00_part1_entry-3.wav 
... 
+0

Sehr nützlich, danke! Wie bekomme ich jetzt die Download-Links? Ich habe versucht, das "i" durch "src", "Tags" durch "att", "f" durch "g" und "t" durch "r" zu ersetzen, und die Downloads-Datei bleibt leer. –

+0

@ZacharyJohnson Siehe meine Bearbeitung. – smarx