2016-12-02 17 views
1

Ich versuche, Daten von einer Website mit Python zu schaben. Wenn ich mir den Quellcode in meinem Browser anschaue, kann ich all die Dinge sehen, nach denen ich suche. Wenn ich jedoch den Code mit BeautifulSoup herunterlade, erhalte ich nur Teile der Daten, die ich möchte.Python Webscraping

Ich weiß BeautifulSoup funktioniert nicht mit Javascript, (Ich weiß überhaupt Javascript nicht) und ich fragte mich, ob es eine Möglichkeit gibt, den ganzen Quellcode herunterzuladen (im Grunde erhalten Sie eine Hardcopy), auch wenn Teile davon Die Seite wurde mit Javascript erstellt.

Dies ist mein Code so weit:

r = requests.get('https://www.example.com/example/example') 
data = BeautifulSoup(r.content) 
example1 = data.find_all("class_="example2") 
examples = [] 
for example in example1: 
    examples.append(link.get('href')) 

Ich weiß, es ist schwer, meine Frage zu beantworten gründlich ohne den eigentlichen Quellcode. Leider kann ich den Code nicht anzeigen! Ich hoffe, es ist kein großes Problem.

+0

Sie scrapy – Backtrack

+0

zum Beispiel in den Beispielen verwendet werden können, wenn Sie Beispiele, wie eine leere Liste deklarieren, wird keine jede Schleife machen – Wonka

+2

Sie Python verwenden können Selen – Tanu

Antwort

1

Vielleicht nicht die beste Lösung, aber hier sind meine 2 Cent, wenn Sie nur Links analysieren möchten.

import requests 
from BeautifulSoup import BeautifulSoup 
r = requests.get('http://www.examples.com') 
data = BeautifulSoup(r.content) 
examples = [] 
for d in data.findAll('a'): 
    examples.append(d) 

Natürlich können Sie für die Klasse suchen können wie:

my_as = soup.findAll("a", { "class" : "someclass" }) 
0

Ihr Code ist falsch und macht keinen Sinn:

r = requests.get('https://www.example.com/example/example') 
data = BeautifulSoup(r.content) 
aes = data.find_all("class_="example2") 
result = [] 
for a in aes: 
    result.append(a.attrs['href']) 
+0

Ich habe mich mit den Beispielen dort entschuldigt. Meine eigentliche Codearbeit ist ähnlich wie bei Ihnen. – titusAdam

+1

'aes = data.find_all (" Klasse _ = "Beispiel2") 'fehlt ein' '' nach 'Klasse_' –

1

Es ist schwer, eine vollständige Kopie eines dynamischen (JavaScript basiert) Website ohne einen Browser zu bekommen, das ist, warum der einfachste Weg, eine solche Kopie zu bekommen ist mit einem Browser.

Sie können in PhantomJS und Selenium schauen, um den Browser zu steuern und den HTML-Code herunterzuladen, oder einfach PhantomJS mit subprocess ausführen.

Ein sehr einfaches PhantomJS Skript den Inhalt einer Website herunter:

"use strict"; 
var fs = require('fs'); 
var system = require('system'); 
var webpage = require('webpage'); 
if (system.args.length != 2) { 
    console.log('Usage: gethtml.js <url>'); 
    phantom.exit(1); 
} else { 
    var url = system.args[1]; 
    var page = webpage.create(); 
    page.open(url, function(status) { 
     if (status !== 'success') { 
      phantom.exit(2); 
     } 
     setTimeout(function() { 
      console.log(page.content); 
      phantom.exit(); 
     }, 500); 
    }); 
} 

Dieser wartet 500ms vor „Download“, je nach Standort und Internet-Anschluss dieses nicht genug ist, oder viel zu viel, können Sie es verbessern Warten Sie, bis PhantomJS das Herunterladen von Daten für X Sekunden mit dem Rückruf onResourceReceived stoppt.

Verwandte Themen