2017-07-12 1 views
0

sagen, dass ich die folgende URL kratzen wollen:Warum kann ich diese Website nicht scrappen?

https://soundcloud.com/search/sounds?q=edm&filter.created_at=last_week

Ich habe folgende Python-Code:

import requests 
from lxml import html 

urlToSearch = 'https://soundcloud.com/search/sounds?q=edm&filter.created_at=last_week' 
    page = requests.get(urlToSearch) 
    tree = html.fromstring(page.content) 
    print(tree.xpath('//*[@id="content"]/div/div/div[3]/div/div/div/ul/div/div/text()')) 

Das Problem ist, wenn ich den Text am folgenden XPath drucken:

//*[@id="content"]/div/div/div[3]/div/div/div/ul/div/div 

nichts erscheint aber trotz mir bestätigt, dass "Found 500+ Tracks" sollte b dort. Was mache ich falsch?

Antwort

1

Das Problem besteht darin, dass Anforderungen keinen dynamischen Inhalt generieren.

Klicken Sie mit der rechten Maustaste auf die Seite und zeigen Sie die Seitenquelle an. Sie sehen, dass der statische Inhalt keinen der Inhalte enthält, die nach dem Laden des dynamischen Inhalts angezeigt werden.

Allerdings (mit Chrome) öffnen Sie die Devices, klicken Sie auf Netzwerk und XHR. Es sieht so aus, als könnten Sie die Daten über eine API erhalten, die sowieso besser ist als das Scraping!

+1

lesen https://developers.soundcloud.com/docs/api/guide für weitere Informationen zur soundcloud-API. – Silveris

+0

leider Soundcloud Arent akzeptiert neue Anwendungen für API Zugriff rn –

0

Problem ist, dass mit modernen Websites fast alle Webseiten ziemlich viel ändern werden, nachdem sie mit JavaScript, CSS etc. geladen worden sind. Sie werden das grundlegende HTML holen, bevor irgendwelche DOM Updates gemacht wurden und werden anders aussehen, tatsächlich zu besuchen Seite mit einem Browser.

Verwenden Sie die Selenium WebDriver Rahmen (meist für die Testautomatisierung verwendet wird), emuliert es die Seite geladen wird, die Ausführung Javascripts usw.

Selenium Documentation for Python

Verwandte Themen