Python - Selenium - tidak dapat membuat webscrape konten teks tertentu dari html

Aug 27 2020

saya mencoba untuk membuat webscrape bagian dari html ini:

<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>

Kode HTML

dari Situs ini:

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

dengan Kode ini:

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)

Saya mencobanya selama 4 jam dan tidak bisa mendapatkannya. Saya mencobanya dengan metode yang berbeda seperti xpath, teks tautan dll. Tetapi yang saya dapatkan hanyalah Nama perusahaan kosong seperti ini "[]".

Apakah seseorang tahu bagaimana selenium dapat menemukan bagian teks yang tepat ini "Liebherr-Hausgeräte Ochsenhausen GmbH"?

Terima kasih banyak.

Jawaban

DebanjanB Aug 27 2020 at 19:06

Untuk mencetak teks Schneider Electric Induk Jerman GmbH Anda harus mendorong WebDriverWait untuk visibility_of_element_located()dan Anda dapat menggunakan salah satu dari berikut Locator Strategi :

  • Menggunakan CSS_SELECTORdan atribut teks :

    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)
    
  • Menggunakan XPATHdan 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"))
    
  • Keluaran Konsol:

    Schneider Electric Holding Germany GmbH
    
  • Catatan : Anda harus menambahkan impor berikut:

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

Anda dapat menemukan diskusi yang relevan di Cara mengambil teks WebElement menggunakan Selenium - Python


Outro

Tautan ke dokumentasi yang berguna:

  • get_attribute() metode Gets the given attribute or property of the element.
  • text atribut kembali The text of the element.
  • Perbedaan antara teks dan innerHTML menggunakan Selenium
balderman Aug 27 2020 at 18:53

Apa yang Anda cari dapat ditemukan di kode sumber halaman di bawah

<div data-company-search><div data-var-name="companyResults" datadan itu adalah bagian dari sumber halaman. Jadi Anda tidak membutuhkan selenium untuk mendapatkannya. cukup baca halaman dengan permintaan dan temukan datanya menggunakan Beautiful Soup.