/ / Jak zeskrobać za pomocą Pythona link z klasy html - python, web-scraping

Jak skrobać za pomocą Pythona link z klasy html - python, web-scraping

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 № 1

Powinieneś 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)