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


def wait(dr, x): 
    element = WebDriverWait(dr, 50).until(
    EC.presence_of_all_elements_located((By.XPATH, x)) 
) 
return element 
from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get("http://www.dinamalar.com/user_comments.asp? uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D") 
for elem in wait(browser, '//*[@id="commsec"]/div[2]/div[1]'): 
print elem.text 

Dies ist der Link Ich brauche alle Kommentare nur die ersten 10 Kommentare Extrahieren http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8DExtrahierung Benutzer Kommentare von Nachrichten-Website

Aber meinen Code zu extrahieren. Nach Anklicken der Schaltfläche werden die anderen 10 Kommentare dynamisch geladen. Wie extrahiert man all diese Kommentare mit Python Selen

Antwort

2

Die Idee wäre zu suchen, wie viele "mehr Ideen" Elemente auf der Seite vorhanden sind. Jedes Mal, wenn Sie auf die Schaltfläche klicken und weitere Kommentare laden, wird ein weiterer roter Knopf "Weitere Ideen" angezeigt. Implementierung:

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


browser = webdriver.Firefox() 
wait = WebDriverWait(browser, 10) 
browser.get("http://www.dinamalar.com/user_comments.asp?uid=14701&name=%E0%AE%A4%E0%AE%AE%E0%AE%BF%E0%AE%B4%E0%AF%8D%E0%AE%9A%E0%AF%86%E0%AE%B2%E0%AF%8D%E0%AE%B5%E0%AE%A9%E0%AF%8D") 

# initial wait for the page to load 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".morered"))) 

pages = 1 
while True: 
    browser.find_elements_by_css_selector(".morered")[-1].click() 

    # wait for more "load more" buttons to be present 
    try: 
     wait.until(lambda browser: len(browser.find_elements_by_css_selector(".morered")) > pages) 
    except TimeoutException: 
     break # no more data loaded, exit the loop 

    print("Comments loaded: %d" % len(browser.find_elements_by_css_selector(".dateg"))) 

    pages += 1 

browser.close() 

Beachten Sie, dass ich auch diesen zusätzlichen Speicherplatz innerhalb der URL entfernt habe.

+0

Danke, das funktioniert gut. Ich bin Anfänger zu diesem, also, wie man Anmerkungen erhält –

+0

@VinayakumarR Ich würde einen XPath hier verwenden: 'Kommentare = [element.text für Element in browser.find_elements_by_xpath (" // div [@ class = 'boxcmt1'] // a [@ class = 'heading']/following-sibling :: div ")]'. Bitte testen. Vielen Dank. – alecxe

+0

Nach dem Hinzufügen dieser Zeile zu bestehenden Code, Warnung Warnung I/O Warnung Nicht ASCII gefunden, aber ich versuche es auszuführen, Es zeigt einen Fehler –

Verwandte Themen