2016-03-14 1 views
0

Основываясь на ответе на здесь о подобной вещи, я попытался очистить текст впечатлений от Erowid. URL имеет кучу ссылок на поездки. Я хочу щелкнуть каждую ссылку, а затем напечатать элемент 'report-text-surround', который является текстом поездки.Selenium, Python 3, простой текст соскабливания от Erowid LSD?

from selenium import webdriver 


driver = webdriver.Chrome() 
driver.get('https://www.erowid.org/experiences/exp.cgi?S1=2&S2=-3&C1=9&Str=') 

#I tried to get hrefs by xpath, knowing that each trip links starts with 'exp.php?ID'. 

view_links = driver.find_elements_by_xpath("""//*[contains(text(), 'exp.php?ID')]""") 
for index, view in enumerate(view_links): 
    html = view.get_attribute('innerHTML') 
    href = html.split('"')[1] 

    view_links[index] = href 

#And then visit each href and get the data 
for href in view_links: 
    driver.get(href) 

    #I know this is the element containing the trip text. 
    trip_text = driver.find_elements_by_class_name('report-text-surround') 
    for trip in trip_text: 
     print (trip.text.encode('utf-8')) 

ответ

0

Таким образом, вы довольно близки, но есть всего две небольшие ошибки.

trip_text = driver.find_elements_by_class_name('report-text-surround') 
for trip in trip_text: 
    print (trip.text.encode('utf-8')) 

Ваш driver.find_elements_by_class_name не должно быть во множественном числе, так как есть только одна на этой странице. В нем много элементов, но только один класс («report-text-surround»). Это означает, что вы сразу получите весь текст, вы можете изменить это, но вам придется пройти через дочерние элементы или получить элементы отдельно.

Вы можете изменить весь этот раздел следующим образом:

text = (driver.find_element_by_class_name('report-text-surround').text).encode('utf-8') 

print(text); 

Это даст вам весь текст во всей статье. Легкий способ разделить это после того, как будет разбивать каждую часть текста на \ n \ n.

Смежные вопросы