2 votes

Importer des données de colonnes spécifiques en utilisant BeautifulSoup

<h3 id="LABandServerNamingConvention-:"><a href="stackoverflow.com/display/ES/Lab+Org+Code+Summary+Listing">Lab Org Code Summary Listing</a>:</h3>
<div class="sectionColumnWrapper">
  <div class="sectionMacro">
    <div class="sectionMacroRow">
      <div class="columnMacro">
        <div class="table-wrap">
          <table class="confluenceTable">
            <tbody>
              <tr>
                <th class="confluenceTh">
                  <p>Prefix</p>
                </th>
                <th class="confluenceTh">
                  <p>Group</p>
                </th>
                <th class="confluenceTh">
                  <p>Contact</p>
                </th>
                <th class="confluenceTh">
                  <p>Dev/Test Lab</p>
                </th>
                <th class="confluenceTh">
                  <p>Performance</p>
                </th>
              </tr>
              <tr>
                <td class="confluenceTd">
                  <p>SEE00</p>
                </td>
                <td class="confluenceTd">
                  <p>Entertainment</p>
                </td>
<tr><td class="confluenceTd"><p>SEF00</p></td><td class="confluenceTd"><p>APTRA Vision</p></td><td class="confluenceTd"><p> </p></td><td class="confluenceTd"><p><a href="stackoverflow.com/pages/viewpage.action?pageId=83909590">VCD Lab</a> , <a href="stackoverflow.com/display/ES/SEF00+%28+Aptra+Vision%29+-+Virtual+Lab+Details">Test Lab</a></p></td>

J'ai un tableau avec 5 colonnes dont 2 sont remplies pour cette entrée spécifique. Comment puis-je obtenir les données de la ligne du tableau dans mon code python à partir de cet extrait HTML ? J'utilise BeautifulSoup. Voici ce que j'ai essayé jusqu'à présent :

data           = requests.get(url,auth=(username,password))
sample         = data.content
soup           = BeautifulSoup(sample,'html.parser')
article_text   = ' '
article        = soup.findAll('td', {'class' : "confluenceTd" })    
for element in article:
article_text += '\n' + ''.join(element.findAll(text = True))

Je veux en quelque sorte obtenir 'SEE00' et 'Entertainment'.

1voto

宏杰李 Points 8709
from bs4 import BeautifulSoup
doc = '''<h3 id="LABandServerNamingConvention-:"><a href="http://stackoverflow.com/display/ES/Lab+Org+Code+Summary+Listing">Lab Org Code Summary Listing</a>:</h3>
<div class="sectionColumnWrapper"><div class="sectionMacro"><div class="sectionMacroRow"><div class="columnMacro"><div class="table-wrap"><table class="confluenceTable"><tbody><tr><th class="confluenceTh"><p>Prefix</p></th><th class="confluenceTh"><p>Group</p></th><th class="confluenceTh"><p>Contact</p></th><th class="confluenceTh"><p>Dev/Test Lab</p></th><th class="confluenceTh"><p>Performance</p></th></tr><tr><td class="confluenceTd"><p>SEE00</p></td><td class="confluenceTd"><p>Entertainment</p></td>
'''
soup = BeautifulSoup(doc, 'lxml')

for row in soup.find_all('tr'):
    print(row.get_text(separator='\t')) # this separator is only for format, you can use whatever you want

dehors :

Prefix  Group   Contact Dev/Test Lab    Performance
SEE00   Entertainment   

vous pouvez contrôler la boucle for avec slice :

for row in soup.find_all('tr')[1:]:

cela n'imprimera que

SEE00   Entertainment 

mettre à jour :

dans :

for row in soup.find_all('tr'):
    row_data = row.get_text(strip=True, separator='|').split('|')[:2]
    print(row_data)

dehors :

['Prefix', 'Group']
['SEE00', 'Entertainment']
['SEF00', 'APTRA Vision']

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X