Python-Selenium-HTML에서 특정 텍스트 콘텐츠를 웹 스크랩 할 수 없습니다.

Aug 27 2020

나는 html 의이 부분을 웹 스크랩하려고합니다.

<td class="zebraTable__td zebraTable__td--companyName"><a href="/unternehmen/8116602/schneider-electric-holding-germany-gmbh" data-gtm="companySearch__searchResult--76">
                        Schneider Electric Holding Germany GmbH
                    </a></td>

HTML 코드

이 사이트에서 :

https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4

이 코드로 :

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
import pandas as pd
import time 

driver = webdriver.Chrome('/Users/rieder/Anaconda3/chromedriver_win32/chromedriver.exe')

driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=500&employeesTo=100000000&sortMethod=revenueDesc&p=1')

driver.find_element_by_id("cookiesNotificationConfirm").click();

company_name = driver.find_element_by_class_name('zebraTable__td zebraTable__td--companyName')

print(company_name)

나는 4 시간 동안 그것을 시도했지만 그것을 얻을 수 없습니다. xpath, 링크 텍스트 등과 같은 다른 방법으로 시도했지만 "[]"와 같은 빈 회사 이름 만 있습니다.

셀레늄이 "Liebherr-Hausgeräte Ochsenhausen GmbH"라는 정확한 텍스트를 어떻게 찾을 수 있는지 아는 사람이 있습니까?

감사합니다.

답변

DebanjanB Aug 27 2020 at 19:06

Schneider Electric Holding Germany GmbH 텍스트를 인쇄하려면에 대해 WebDriverWait 를 유도해야 visibility_of_element_located()하며 다음 로케이터 전략 중 하나를 사용할 수 있습니다 .

  • 사용 CSS_SELECTOR텍스트 속성 :

    driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#cookiesNotificationConfirm"))).click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "table.zebraTable.zebraTable--companies tr:nth-child(2)>td.zebraTable__td.zebraTable__td--companyName>a"))).text)
    
  • XPATH및 사용 get_attribute("innerHTML"):

    driver.get('https://de.statista.com/companydb/suche?idCountry=276&idBranch=0&revenueFrom=-1000000000000000000&revenueTo=1000000000000000000&employeesFrom=0&employeesTo=100000000&sortMethod=revenueDesc&p=4')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@id='cookiesNotificationConfirm']"))).click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[@class='zebraTable zebraTable--companies']//following::tr[2]/td[@class='zebraTable__td zebraTable__td--companyName']/a"))).get_attribute("innerHTML"))
    
  • 콘솔 출력 :

    Schneider Electric Holding Germany GmbH
    
  • 참고 : 다음 가져 오기를 추가해야합니다.

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

Selenium을 사용하여 WebElement의 텍스트를 검색하는 방법-Python 에서 관련 토론을 찾을 수 있습니다.


아우트로

유용한 문서 링크 :

  • get_attribute() 방법 Gets the given attribute or property of the element.
  • text 속성 반환 The text of the element.
  • Selenium을 사용하는 텍스트와 innerHTML의 차이점
balderman Aug 27 2020 at 18:53

찾고있는 내용은 아래 페이지소스 코드 에서 찾을 수 있습니다.

<div data-company-search><div data-var-name="companyResults" data페이지 소스의 일부입니다. 따라서 그것을 얻기 위해 셀레늄이 필요하지 않습니다. 요청이있는 페이지를 읽고 Beautiful Soup을 사용하여 데이터를 찾으십시오.