Próbuję pobrać link ze strony internetowej. To dźwięk słowa. Ta strona jest http://dictionary.reference.com/browse/would?s=t
więc używam następującego kodu, aby uzyskać łączeale zbliża się pusty. To dziwne, ponieważ mogę użyć podobnej konfiguracji i pobrać dane z magazynu. Chodzi o to, aby stworzyć program dający dźwięk tego słowa, a następnie poprosić o pisownię. To jest dla moich dzieci. Musiałem przejść przez listę słów, aby uzyskać linki w słowniku, ale problemy z uzyskaniem linku do wydrukowania. Używam urllib i ponownie kodu poniżej.
import urllib
import re
words = [ "would","your", "apple", "orange"]
for word in words:
urll = "http://dictionary.reference.com/browse/" + word + "?s=t" #produces link
htmlfile = urllib.urlopen(urll)
htmltext = htmlfile.read()
regex = "<a class="speaker" href =>(.+?)</a>" #puts tag together
pattern = re.compile(regex)
link = re.findall(pattern, htmltext)
print "the link for the word", word, link #should print link
To jest oczekiwany wynik tego słowa http://static.sfdict.com/staticrep/dictaudio/W02/W0245800.mp3
Odpowiedzi:
2 dla odpowiedzi № 1Powinieneś naprawić swoje regularne wyrażenie, aby zgarnąć wszystko w środku href
wartość atrybutu:
<a class="speaker" href="(.*?)"
Pamiętaj, że naprawdę powinieneś rozważyć przełączanie z regex na parsery HTML, lubić BeautifulSoup
.
Oto, jak możesz się zgłosić BeautifulSoup
w tym przypadku:
import urllib
from bs4 import BeautifulSoup
words = ["would","your", "apple", "orange"]
for word in words:
urll = "http://dictionary.reference.com/browse/" + word + "?s=t" #produces link
htmlfile = urllib.urlopen(urll)
soup = BeautifulSoup(htmlfile, "html.parser")
links = [link["href"] for link in soup.select("a.speaker")]
print(word, links)