2017-09-16 4 views
1

Il n'y a pas id table spécifique pour la table que je veux gratter, et la hauteur/niveaux largeur du match de table d'autres tables sur la même page, mais la chaîne HTML littérale est unique:Grattage d'une table sans ID avec python/beautifulsoup, comment puis-je utiliser la chaîne littérale html?

<table border="10%" cellpadding="10%" cellspacing="10%" width="100%">

Alors, quel est le formatage dans "soup.find()" pour trouver cette chaîne littérale.

+1

un exemple de ce que vous entendez serait utile! – coder

Répondre

0

Vous pouvez trouver toutes les tables de la page en utilisant la méthode findAll('table'), puis placer les objets de table dans un constructeur de chaîne pour obtenir leur code html littéral. (Le constructeur de chaîne appelle essentiellement __str__() sur l'objet de table)

Exemple:

import bs4 

page = """ 

<html> 
    <head> </head> 

    <body> 
     <table border="10%" cellpadding="10%" cellspacing="10%" width="100%""> 
      <tr> 
      <th>Firstname</th> 
      <th>Lastname</th> 
      <th>Age</th> 
      </tr> 
      <tr> 
      <td>Altair</td> 
      <td>Ibn La Ahad</td> 
      <td>939</td> 
      </tr> 
      <tr> 
      <td>Ezio </td> 
      <td>Auditore</td> 
      <td>604</td> 
      </tr> 
     </table> 
    </body> 
</html> 

""" 

bs= bs4.BeautifulSoup(page, 'lxml') 

tables = bs.findAll('table') # Find all tables 

# for each table 
for table in tables: 
    table_html_code= str(table)   #get html code of this table 

    first_line = table_html_code.split('\n')[0] # get first line of the table's html code 
    print(first_line) 

Une autre chose que vous pouvez essayer d'utiliser l'ordre des tables. Si vous souhaitez accéder à la quatrième table dans la page que vous pouvez accéder à la table comme ceci:

beautifulsoup_obj.findAll('table')[3] 
0

De la recherche à la documentation, il semble que vous pouvez faire ce qui suit avec la méthode find(). Vous pouvez passer dans un dictionnaire d'attributs HTML. Il semble que this link a une question/solution similaire.

BeautilSoup.find (self, name = Aucun, attrs = {}, récursives = True, text = Aucun, ** kwargs)

from bs4 import BeautifulSoup 

html = """ 
<html> 
<head> 
</head> 

<body> 
    <table border="10%" cellpadding="10%" cellspacing="10%" width="100%"></table> 

    <table></table 
</body> 
</html> 
""" 

soup = BeautifulSoup(html, 'html.parser') 

results = soup.find("table", {"border": "10%", "cellpadding": "10%", "cellspacing": "10%", "width": "100%"}) 

print(results)