Как извлечь текст из текстового узла, изолируя теги <br>в таблице? - PullRequest
1 голос
/ 20 февраля 2020

enter image description here

У меня проблема с печатью в той же строке данных таблицы. Конечно, я мог бы просто идентифицировать с css_selector("td"), но это распечатывает: Имя Адрес Город / Город Телефон в том же столбце, в то время как я пытаюсь создать: Имя, Адрес, Город / Штат, Телефон в той же строке

HTML: (см. Прикрепленное фото)

Кажется, что это такая глупая проблема, над которой нужно зацикливаться ... но я застрял в течение довольно долгого времени и не был возможность выделить <br> теги.

код:

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

Я определил это таким образом, чтобы попытаться просто вернуть текст исходящих братьев и сестер ... снова безрезультатно. driver.find_elements_by_css_selector("td") Также возвращает данные всей таблицы ... но с перерывами

Ответы [ 4 ]

0 голосов
/ 20 февраля 2020
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

Это сделало работу.

0 голосов
/ 20 февраля 2020

<br> добавляет новую строку \n к тексту <td>, вы разделяете его или удаляете

tds = driver.find_elements_by_css_selector("td")
for td in tds:
     text = td.text.split('\n')
     print(text) # list: ['text1', 'text2', 'text3', 'text4']

     text = td.text.replace('\n', ' ')
     print(text) # str: 'textr text2 text3 text4'
0 голосов
/ 20 февраля 2020

BeautifulSoup также можно использовать в этом сценарии.

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

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

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

и проверить условие, если есть тег 'br', тогда пропустить

0 голосов
/ 20 февраля 2020

Если вы можете идентифицировать родительский элемент <td> с помощью css_selector("td") для печати Имя , Адрес , Город / Штат и Телефон Вы можете использовать следующие Стратегии определения местоположения :

  • Имя :

    print(WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td>strong"))).get_attribute("innerHTML"))
    
  • Адрес :

    print(driver.execute_script('return arguments[0].childNodes[3].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
  • Город / штат :

    print(driver.execute_script('return arguments[0].childNodes[5].textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
  • Телефон :

    print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "td")))).strip())
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...