1
votes

Comment extraire des textes du nœud de texte en isolant les balises
dans le tableau?

 entrez la description de l'image ici

J'ai un problème d'impression sur la même ligne, les données du tableau. Bien sûr, je pourrais simplement m'identifier à css_selector ("td") , mais cela s'imprime: Nom Adresse Ville / État Téléphone dans la même colonne alors que j'essaye de créer: Nom, adresse, ville / état, téléphone à la même ligne

HTML: (voir photo ci-jointe)

Cela semble être un problème si stupide à raccrocher ... mais Je suis bloqué depuis un certain temps et je n'ai pas pu isoler les balises
.

Code:

for x in link:
driver.get(x)
try:
    i = 0
    while 0 < 20:
        name = driver.find_elements_by_xpath("/html/body/div[2]/div/div[1]/div/div/table/tbody/tr/td[1]/table/tbody/tr['"+str(i)+"']/td/strong")
        if name[i].is_displayed():
            print(name[i].text)

            i = i + 1
        else:
            i = i + 1
except(NoSuchElementException,JavascriptException, IndexError):
    continue


3 commentaires

Veuillez ne pas partager d'informations sous forme d'images à moins que cela ne soit absolument nécessaire. Voir: meta.stackoverflow .com / questions / 303812 /… , idownvotedbecau.se/imageofcode , idownvotedbecau.se/imageofanexception .


Pouvez-vous partager votre code?


Ce n'est probablement pas directement lié au problème, mais que se passe-t-il avec le while 0 <20: et i = i + 1; sinon: i = i + 1; ?


4 Réponses :


0
votes

Si vous parvenez à identifier l'élément parent avec css_selector (" td ") pour imprimer Nom , Adresse strong >, Ville / État et Téléphone , vous pouvez utiliser les Stratégies de localisation :

  • Nom :

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
  • Adresse :

    print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
  • Ville / État :

    print(driver.execute_script('return arguments[0].childNodes[3].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
  • Téléphone :

    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td>strong"))).get_attribute("innerHTML"))
    


0 commentaires

0
votes

Le
ajoute une nouvelle ligne \ n au texte du , vous le séparez ou le supprimez < pré> XXX


0 commentaires

0
votes

BeautifulSoup peut également être utilisé dans ce scénario.

>>>from bs4 import beautifulsoup
>>>import requests
>>>contents=requests.get(url).text

>>>soup=beautifulsoup('lxml',contents)

>>>>Text=soup.find('body').text

et vérifiez la condition si la balise 'br' est présente, puis ignorez


0 commentaires

0
votes
for x in link:
driver.get(x)
try:

    names = driver.find_elements_by_css_selector("td")
    i = 0
    while i <= len(names):
        address = names[i].text.splitlines()
        r = len(address)

        if r == 4:
            print(x, " | ",address[0], " | ", address[1], " | ", address[2], " | ", address[3])


        elif r == 3:

            print(x, " | ",address[0], " | ", address[1], " | ", address[2])

        else:
            pass
        i=i+1


except(NoSuchElementException, IndexError):
    continue
This did the job. 

0 commentaires