BeautifulSoup / YouTube: Hat jemand eine Idee, was ich an dem Code verändern müsste, damit der alle /watch-Links extrahiert und diese ausgibt?
Hey Leute,
ich habe eine Frage zu Python und BeautifulSoup. Mein Webcrawler funktioniert eigentlich ganz gut, nur wenn ich damit versuche, Video-URLs zu extrahieren, geht nichts.
def get_linked_urls(self, url, html):
soup = BeautifulSoup(html, 'html.parser')
for link in soup.find_all('a'):
path = link.get('href')
print(path)
if path and path.startswith('/watch?'):
path = urljoin(url, path)
yield path
"commandMetadata": {
"webCommandMetadata": {
"url": "/watch?v=HmP_wGYw1_g\u0026list=PLu0ocO48LFms5WsI1ipaeanxqRjn2fC_5\u0026index=2",
Ich habe vergessen, dass JavaScript natürlich ausgeführt wird, also funktioniert es nicht, wenn ich die Elemente anspreche, die ich unter den untersuchten Elementen gefunden habe.
Hat jemand eine Idee, was ich an dem Code verändern müsste, damit der alle /watch-Links extrahiert und diese ausgibt?
Gut wäre, wenn man noch https://www.youtube.com hinzufügen könnte.
1 Antwort
BeautifulSoup parst nur den HTML-Code, den du übergibst. Das HTML wird nicht in der Form evaluiert, sodass vorher noch einmal Skripte o.ä. ausgewertet werden würden.
Du kannst stattdessen Selenium nutzen, um Inhalte aus der Webseite zu ziehen. Das Framework erlaubt die automatisierte Ausführung von Aktionen in einem Browser. Das heißt, du kannst darauf warten, bis die Webseite komplett geladen wurde und danach die Links herausziehen.