0
votes

Problème de belle-analyse de la raclée du texte dans la matrice

DATA =

<td class="dojoxGridCell" idx="3" role="gridcell" style="width:40%;" tabindex="-1">ROOF PLAN</td> ...


4 commentaires

juste essayer avec dessin_no.gettext ()


Il donne une erreur: "L'objet RestaurantsSet n'a aucun attribut '% s'. Vous traitez probablement une liste d'éléments comme un seul élément. Avez-vous appelé Find_all () lorsque vous vouliez appeler la recherche ()?" % clé AttributeError: l'objet ResultSet n'a aucun attribut 'GetText'. Vous traitez probablement une liste d'articles comme un seul article. Avez-vous appelé Find_All () lorsque vous vouliez appeler Rechercher ()?


Il est dû à la Find_All juste ajouter une autre pour boucle après ou si un seul élément remplace Find_All par trouver


édité dessin_no = article.find ('TD', classe _ = 'dojoxgridcell', idx = '3'). Il donne: AttributeError: l'objet «non constitué» n'a aucun attribut 'GetText'


3 Réponses :


0
votes

S'il vous plaît essayer ci-dessous le code. Mais en général, si vous passez à IDX = 3, il ne renvoie qu'un seul élément. Si vous souhaitez extraire le texte de plusieurs éléments, vous pouvez utiliser un identifiant plus général.

import lxml
from lxml import html

html_string = """
<div class="dojoxGridView" id="dojox_grid__View_1" role="presentation" style="width: 1900px; height: 721px; left: 1px; top: 0px;" widgetid="dojox_grid__View_1">
  <input class="dojoxGridHiddenFocus" dojoattachpoint="hiddenFocusNode" role="presentation" type="checkbox"/>
  <input class="dojoxGridHiddenFocus" role="presentation" type="checkbox"/>
  <div class="dojoxGridScrollbox" dojoattachpoint="scrollboxNode" role="presentation" style="height: 721px;">
    <div class="dojoxGridContent" dojoattachpoint="contentNode" hidefocus="hidefocus" role="presentation" style="height: 504px; width: 1900px;">
      <div role="presentation" style="position: absolute; left: 0px; top: 0px;">
        <div aria-selected="false" class="dojoxGridRow" role="row" style="">
          <table border="0" cellpadding="0" cellspacing="0" class="dojoxGridRowTable" role="presentation" style="width: 1900px;">
            <tbody>
              <tr>
                <td class="dojoxGridCell" idx="0" role="gridcell" style="display:none;width:100px;" tabindex="-1">
                78126
                </td>
                <td class="dojoxGridCell" idx="1" role="gridcell" style="width:10%;" tabindex="-1">
                Approved Plan
                </td>
                <td class="dojoxGridCell" idx="2" role="gridcell" style="width:10%;" tabindex="-1">
                G-10
                </td>
                <td class="dojoxGridCell" idx="3" role="gridcell" style="width:40%;" tabindex="-1">
                ROOF PLAN
                </td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
    </div>
  </div>
</div>
"""

tree = html.fromstring(html_string)
ROOFPLAN = tree.xpath('//tbody/tr//td[@idx="3"]/text()')
print(''.join(ROOFPLAN).strip())


3 commentaires

TypeError: Chaîne attendue ou objet de type octet


upvote, au fait, contrairement à BS4, il n'a pas de "," entre la chaîne, puis-je l'exporter en csv ou à des pandas? Cela donne quelque chose comme le planleur de toiture Fl. Planground fl. Plangron fl. Plan2nd fl. plan3r . Plan et 16e fl. Plan au 18e fl. Plan15th FL15th FL.19ème FL. Planification du plan 2010 Plan au 25e fl. PlancalculationsShade Calculsection de la région A - ASSE B - Bnorth-Ouest élévationnorth-EST ElevationsUnées-Est, sans espace


Il serait plus clair si vous pouvez partager le code source car je ne sais pas d'en haut où le texte est stocké



0
votes

Essayez le code suivant

source="""<div class="dojoxGridView" id="dojox_grid__View_1" role="presentation" style="width: 1900px; height: 721px; left: 1px; top: 0px;" widgetid="dojox_grid__View_1">
       <input class="dojoxGridHiddenFocus" dojoattachpoint="hiddenFocusNode" role="presentation" type="checkbox"/>
       <input class="dojoxGridHiddenFocus" role="presentation" type="checkbox"/>
       <div class="dojoxGridScrollbox" dojoattachpoint="scrollboxNode" role="presentation" style="height: 721px;">
        <div class="dojoxGridContent" dojoattachpoint="contentNode" hidefocus="hidefocus" role="presentation" style="height: 504px; width: 1900px;">
         <div role="presentation" style="position: absolute; left: 0px; top: 0px;">
          <div aria-selected="false" class="dojoxGridRow" role="row" style="">
           <table border="0" cellpadding="0" cellspacing="0" class="dojoxGridRowTable" role="presentation" style="width: 1900px;">
            <tbody>
             <tr>
              <td class="dojoxGridCell" idx="0" role="gridcell" style="display:none;width:100px;" tabindex="-1">
               78126
              </td>
              <td class="dojoxGridCell" idx="1" role="gridcell" style="width:10%;" tabindex="-1">
               Approved Plan
              </td>
              <td class="dojoxGridCell" idx="2" role="gridcell" style="width:10%;" tabindex="-1">
               G-10
              </td>
              <td class="dojoxGridCell" idx="3" role="gridcell" style="width:40%;" tabindex="-1">
               ROOF PLAN
              </td>
             </tr>
            </tbody>
           </table>
          </div>"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(source,"html.parser")
for article in soup.find_all('div', class_='dojoxGridContent'):
  drawing_no = article.find('td', class_='dojoxGridCell', idx='3')
  if drawing_no:
    print(drawing_no.get_text())


7 commentaires

Erreur: AttributeError: l'objet "non constitué" n'a aucun attribut 'get_text'


Possible si certains articles n'ont pas d'éléments de table avec une vérification TD correspondante mise à jour et qu'il n'imprime que si l'élément existe


Même erreur :( "Objet ResultSe n'a aucun attribut '% s'. Vous traitez probablement une liste d'éléments comme un seul élément. Avez-vous appelé Find_All () lorsque vous vouliez appeler Rechercher ()?"% Touche AttributeError: ResultSet objet n'a aucun attribut 'get_text'. Vous traitez probablement une liste d'éléments comme un seul élément. Avez-vous appelé Find_all () lorsque vous vouliez appeler Rechercher ()?


avez-vous remarqué l'article.fr changez que j'ai remplacé Find_All


Oh non, je n'ai pas fait, ça marche! donne: plan de toit mais comment puis-je obtenir tout élément cependant?


Tout élément signifie tout TD à l'intérieur de DojoxGridContent


Je l'ai eu, si Drawing_no: pour D dans Dessin_no: Imprimer (d.get_text ())



0
votes

Vous pouvez utiliser l'attribut iDX et sélectionner par sa valeur xxx


0 commentaires