2016-07-27 4 views

Antwort

1

Ja, wenn es mit einem Webbrowser angezeigt werden kann, können Sie es extrahieren.

Wenn Sie auf die Quelle schauen, ist es wirklich ein Iframe, der ein Stück Javascript lädt, das dann ein neues Tag im Dokument mit der Quelle dieses Skript-Tags lädt bundle.js, das wirklich die Kommentar-Software enthält. Dies holt abwechselnd die tatsächlichen Kommentare.

Anstatt dies manuell durchzugehen, können Sie beispielsweise webkit verwenden, um einen kopflosen Browser zu erstellen, der das Javascript wie ein gewöhnlicher Browser ausführt. Dann können Sie davon abkratzen, anstatt Ihren Crawler manuell die externen Ressourcen abrufen zu müssen.

Beispiele für solche ohne Kopf Browser Spynner sein könnten, Dryscape oder die PhantomJS abgeleitet PhantomPy (letzteres scheint jetzt ein verlassenes Projekt zu sein).

+0

Ich sah das 'Dokument "// www.spot.im/launcher/bundle.js") zu tun,' aber, wo die Datei ist? Kann ich in diese Datei gehen, um die Kommentare zu extrahieren? – user6575792

+0

Sie müssen die Datei von der URL herunterladen - Ihr Browser tut dies automatisch, da sie auf die Quelle eines Iframes verweist. Die Kommentare werden nicht direkt in dieser Datei gespeichert, daher können Sie die Kommentare nicht von dort extrahieren. Es ist nur der Code für die Bearbeitung der Kommentare. – jksoegaard

+0

Können Sie mich auf ein Beispiel beziehen, das etwas wie Kommentare extrahiert? Irgendein Tutorial oder Code? Ich möchte das verstehen, wie kann es gemacht werden? – user6575792

0

RT werden mit einem Service von spot.im für Kommentare

Sie tun müssen, um zwei POST-Anfragen machen, erste https://api.spot.im/me/network-token/spotim einen Token zu bekommen, dann https://api.spot.im/conversation-read/spot/sp_6phY2k0C/post/353493/get die Kommentare als JSON zu bekommen.

i schrieb eine schnelle Skript diese

import requests 
import re 
import json 

def get_rt_comments(article_url): 
    spotim_spotId = 'sp_6phY2k0C' # spotim id for RT 
    post_id = re.search('([0-9]+)', article_url).group(0) 

    r1 = requests.post('https://api.spot.im/me/network-token/spotim').json() 
    spotim_token = r1['token'] 

    payload = { 
     "count": 25, #number of comments to fetch 
     "sort_by":"best", 
     "cursor":{"offset":0,"comments_read":0}, 
     "host_url": article_url, 
     "canonical_url": article_url 
    } 

    r2_url ='https://api.spot.im/conversation-read/spot/' + spotim_spotId + '/post/'+ post_id +'/get' 
    r2 = requests.post(r2_url, data=json.dumps(payload), headers={'X-Spotim-Token': spotim_token , "Content-Type": "application/json"}) 

    return r2.json() 

if __name__ == '__main__': 
    url = 'https://www.rt.com/usa/353493-clinton-speech-affairs-silence/' 
    comments = get_rt_comments(url) 
    print(comments) 
+0

Kann ich diese beiden Anfragen zum Scraping von Javascript-Material stellen? – user6575792

+0

Sie müssen sich keine Gedanken über Javascript machen, die obige Methode gibt Ihnen die Kommentare im JSON-Format (dies sind die Daten, die das Javascript im Browser verwendet, um die Kommentare anzuzeigen). Versuchen Sie, das Skript auszuführen – Mono

+0

1. Es gab einen JSON zurück. 'comment.text' ist keine Methode. 2. Ich möchte das gleiche (Kommentar Extraktion) von "http: // www.aljazeera.com /". Ich lese über Phantomjs und Phantompy. Kann ich sie für diesen Zweck verwenden? – user6575792

Verwandte Themen