2016-07-22 15 views
1

Ich versuche, eine Website, die mit Tabellen erstellt wurde, zu verschrotten. Hier ein Link zum Beispiel einer Seite: http://www.rc2.vd.ch/registres/hrcintapp-pub/companyReport.action?rcentId=5947621600000055031025&lang=FR&showHeader=falseScrap-Tabelle HTML mit beautifulSoup

Mein Ziel ist es, den Namen und den Nachnamen zu bekommen: Lass Christian (Screenshot unten).

enter image description here Ich habe schon viele Websites geknipst, aber dieses hier habe ich absolut keine Ahnung, wie es weiter geht. Es gibt nur "Tabellen" ohne ID/Class-Tags und ich kann nicht herausfinden, wo ich anfangen soll.

Hier ist ein exemple des HTML-Codes:

<table border="1" cellpadding="1" cellspacing="0" width="100%"> 
 
\t \t \t <tbody><tr bgcolor="#f0eef2"> 
 
\t \t \t \t 
 
\t \t \t \t <th colspan="3">Associés, gérants et personnes ayant qualité pour signer</th> 
 
\t \t \t </tr> 
 
\t \t \t <tr bgcolor="#f0eef2"> 
 
\t \t \t \t 
 
\t \t \t \t <th> 
 
\t \t \t \t \t <a class="hoverable" onclick="document.forms[0].rcentId.value='5947621600000055031025';document.forms[0].lang.value='FR';document.forms[0].searchLang.value='FR';document.forms[0].order.value='N';document.forms[0].rad.value='N';document.forms[0].goToAdm.value='true';document.forms[0].showHeader.value=false;document.forms[0].submit();event.returnValue=false; return false;"> 
 
\t \t \t \t \t \t Nom et Prénoms, Origine, Domicile, Part sociale 
 
\t \t \t \t \t </a> 
 
\t \t \t \t \t 
 
\t \t \t \t </th> 
 
\t \t \t \t <th> 
 
\t \t \t \t \t <a class="hoverable" onclick="document.forms[0].rcentId.value='5947621600000055031025';document.forms[0].lang.value='FR';document.forms[0].searchLang.value='FR';document.forms[0].order.value='F';document.forms[0].rad.value='N';document.forms[0].goToAdm.value='true';document.forms[0].showHeader.value=false;document.forms[0].submit();event.returnValue=false; return false;"> 
 
\t \t \t \t \t \t Fonctions 
 
\t \t \t \t \t </a> 
 
\t \t \t \t \t 
 
\t \t \t \t \t \t <img src="/registres/hrcintapp-pub/img/down_r.png" align="bottom" border="0" alt=""> 
 
\t \t \t \t \t 
 
\t \t \t \t </th> 
 
\t \t \t \t <th>Mode Signature</th> 
 
\t \t \t </tr> 
 
\t \t \t 
 
\t \t \t \t <tr bgcolor="#ffffff"> 
 
\t \t \t \t \t 
 
\t \t \t \t \t 
 
\t \t \t \t \t <td> 
 
\t \t \t \t \t \t <span style="text-decoration: none;"> 
 
\t \t \t \t \t \t \t Lass Christian, du Danemark, à Yverdon-les-Bains, avec 200 parts de CHF 100 
 
\t \t \t \t \t \t </span> 
 
\t \t \t \t \t </td> 
 
\t \t \t \t \t <td><span style="text-decoration: none;">associé gérant </span>&nbsp;</td> 
 
\t \t \t \t \t 
 
\t \t \t \t \t 
 
\t \t \t \t \t \t <td><span style="text-decoration: none;">signature individuelle</span>&nbsp;</td> \t \t \t \t \t 
 
\t \t \t \t \t 
 
\t \t \t \t \t 
 
\t \t \t \t </tr> 
 
\t \t \t 
 
\t \t \t 
 
\t \t \t 
 
\t \t \t 
 
\t \t </tbody></table>

+0

Sie wollen nur die einzelne Zeile, die den Namen hat? –

+0

Ja, ich möchte * Lass Christian * bekommen, aber nicht alle Seiten auf der Website sind gleich, manchmal gibt es mehr Tische. Also möchte ich herausfinden, wie man den Namen für jede Art von Seite bekommt. – jjyoh

Antwort

2

Dies wird den Namen von der Seite, ist die Tabelle direkt nach dem Anker mit dem idadm erhalten, sobald Sie, dass Sie zahlreiche Möglichkeiten, sie zu haben, was Sie brauchen:

from bs4 import BeautifulSoup 
import requests 

r = requests.get('http://www.rc2.vd.ch/registres/hrcintapp-pub/companyReport.action?rcentId=5947621600000055031025&lang=FR&showHeader=false') 


soup = BeautifulSoup(r.content,"lxml") 
table = soup.select_one("#adm").find_next("table") 
name = table.select_one("td span[style^=text-decoration:]").text.split(",", 1)[0].strip() 
print(name) 

Ausgang:

Lass Christian 

Oder:

table = soup.select_one("#adm").find_next("table") 
name = table.find("tr",bgcolor="#ffffff").td.span.text.split(",", 1)[0].strip() 
+1

Danke !!! Es funktioniert perfekt! – jjyoh

+0

Kein Problem, gern geschehen. –

+1

Schätzen Sie die nette Antwort ... erhöhte mein Lernen auch! – John

0

So etwas wie das?

results = soup.find_all("tr", {"bgcolor" : "#ffffff"}) 
for result in results: 
    the_name = result.td.span.get_text().split(',')[0] 
+0

Gute Idee! Aber ich bekomme den zweiten Teil nicht: result.td.span.get_text(). Split (',') [0]? Es gibt mich zurück AttributeError: 'NoneType' -Objekt hat kein Attribut 'get_text'. Was denken Sie ? – jjyoh

+0

Die Idee ist, in das 'td' Element zu schauen, dann in das eingeschlossene' span' Element. Was dieser Fehler bedeutet, ist, dass dieser Baum für eines der "tr" -Elemente nicht gefunden wurde. Fügen Sie vielleicht eine 'print'-Anweisung hinzu, um zu sehen, ob Sie eine von ihnen finden. Entschuldigung, ich bin gerade nicht an einem Ort, wo ich es testen kann, aber ich werde später sein. – John