2016-09-16 4 views
0

У меня есть веб-скребок, который возвращает мне значения, как в примере ниже., добавляющий список python

# Other code above here. 
test = [] 

results = driver.find_elements_by_css_selector("li.result_content") 
for result in results: 
    # Other code about result.find_element_by_blah_blah 
    product_feature = result.find_element_by_class_name("prod-feature-icon") 

    for each_item in product_feature.find_elements_by_tag_name('img'): 
     zz = test.append(each_item.get_attribute('src')[34:-4]) # returning the values I want 
     print(zz) 

Код выше будет распечатать результаты, как это: (Что это значения, которые я хочу)

TCP_active 
CI 
DOH_active 
TCP_active 
CI 
DOH 
TCP 
CI_active 
DOH_active 

Я хочу, чтобы достичь результатов ниже:

[TCP_active, CI, DOH_active] 
[TCP_active, CI, DOH] 
[TCP, CI_active, DOH_active] 

как должен Я это делаю?

Я пробовал:

test.append(each_item.get_attribute('src')[34:-4]) 

Но это дает мне:

[TCP_active] 
[TCP_active, CI] 
[TCP_active, CI, DOH_active] 
[TCP_active, CI, DOH_active, TCP] 
... 

Надеюсь, мое объяснение ясно

+0

Я не уверен, что полностью понимаю, но вы изучили использование словаря для этого? Кажется, что словарь будет лучшим и более элегантным решением ... – JasonD

+0

Изменен мой вопрос, который может быть более полезным –

+1

Создайте новый список для каждого результата «result in results», который 'для each_item в product_feature.find_elements_by_tag_name (..)' цикл добавляется. Затем добавьте этот список в 'test'. –

ответ

2

Вместо print, добавьте свои результаты в списки; один новый список на итерации внешнего цикла:

test = [] 

results = driver.find_elements_by_css_selector("li.result_content") 
for result in results: 
    # Other code about result.find_element_by_blah_blah 
    product_feature = result.find_element_by_class_name("prod-feature-icon") 
    features = [] 
    for each_item in product_feature.find_elements_by_tag_name('img'): 
     features.append(each_item.get_attribute('src')[34:-4]) 
    test.append(features) 

Вы можете распечатать features, если вы хотите, или test, просто чтобы посмотреть, что происходит на каждом уровне ваших for петель.

+0

Спасибо за ваш быстрый ответ! Я попробовал ваш метод, и он работает. :) –

0

ОК, не совсем уверен, что вы хотите, но код ниже даст вывод, который вы хотите:

test = [] 

results = driver.find_elements_by_css_selector("li.result_content") 
for result in results: 
    # Other code about result.find_element_by_blah_blah 
    product_feature = result.find_element_by_class_name("prod-feature-icon") 

    zz = [] 
    for each_item in product_feature.find_elements_by_tag_name('img'): 
     zz = test.append(each_item.get_attribute('src')[34:-4]) # returning the values I want 

    print(zz) 

Если вы хотите хранить данные и не печатать его, использовать словарь что-то вроде этого:

test = [] 
zz_store = {} 

results = driver.find_elements_by_css_selector("li.result_content") 
for result in results: 
    # Other code about result.find_element_by_blah_blah 
    product_feature = result.find_element_by_class_name("prod-feature-icon") 

    zz = [] 
    for each_item in product_feature.find_elements_by_tag_name('img'): 
     zz = test.append(each_item.get_attribute('src')[34:-4]) # returning the values I want 

    zz_store[result] = zz 
    print(zz) 
Смежные вопросы