2016-07-24 2 views
1

meinen HTML hat mehrere Tabellen, die erste Tabelle Schaben ist:Python BeautifulSoap Tabelle

<table> 
    <tr> 
     <td> 
      <div id="string"> 
      </div> 
     </td> 
    </tr> 
</table> 

und der Rest ist von der Form:

<table class="confluenceTable" data-csvtable="1"> 
     <tbody> 
      <tr> 
      <th class="highlight-grey confluenceTh" data-highlight-colour="grey" rowspan="2" style="text-align: center;">Negev</th> 

Ich mag aus den Tabellen Daten kratzen. wenn ich benutze:

from bs4 import BeautifulSoup 
from urllib.request import urlopen 

url = 'XXX' 
soup = BeautifulSoup(urlopen(url).read(), "lxml") 
for table in soup.findAll('table'): 
    print(table) 

es findet nur die erste Tabelle. Wenn ich die Suche zu ändern:

soup.findAll("table", { "class" : "confluenceTable" }) 

es findet nichts. Was vermisse ich?

mit Python 3.4 auf Windows mit BeautifulSoap 4,5

Antwort

2

Ich vermute, dass Sie versuchen, eine Atlassian Confluence Seite zu kratzen, die in der Regel sehr dynamisch ist und die Verwendung von JavaScript macht intensiv um die Seite zu laden. Wenn Sie in die HTML-Quelle schauen, die Sie mit urllib herunterladen, würden Sie table Elemente mit confluenceTable Klasse nicht finden.

Stattdessen sollten Sie entweder Confluence API verwenden oder ein Browser-Automatisierungstool wie selenium verwenden.

+0

Es ist in der Tat eine Confluence-Seite, ich werde in die Optionen, die Sie erwähnt haben, schauen. Danke – susdu

+0

Herzlichen Glückwunsch zum 200k :) –

+1

@PadraicCunningham danke, natürlich, schließend SO Tab jetzt und nicht immer wieder zu beantworten! – alecxe