Я собираю данные для проекта науки о данных, использующего Selenium, и я не знаю, почему я получаю ошибки Index в части записи в csv. Когда я распечатываю данные как есть, вывод выглядит нормально.

Код ниже:

«»»

driver = webdriver.Firefox(executable_path="/filepath/geckodriver.exe")

url = 'https://website.com'

driver.get(url)

with open('file.csv', 'w') as f:
    f.write('Column1', 'Column2', 'Column3', '\n')

ids = driver.find_elements_by_xpath('//*[@class="id-name"]')
id_list = []
for i in range(50):
    id_list.append(ids[i].text)
print(len(ids))
print(len(id_list))
print(id_list[0:50])

# Break up into batches to save memory
new_id_list = [id_list[i:i+5] for i in range(0,len(id_list),5)]

#time.sleep(1200)

for i in range(len(new_id_list)):
    for j in range(len(new_id_list[i])):
        url = 'http://www.website.com?id=' + str(id_list[j])
        driver.get(url)
        col1 = driver.find_elements_by_xpath('//*[@id="field-value-col_1"]/span/span')
        col2 = driver.find_elements_by_xpath('//h1[@id="field-value-col_2"]')
        col3 = driver.find_elements_by_xpath('//*[@id="field-value-col_3"]')

        print(id_list[i][j] + ',' + col1[0].text + ',' + col2[0].text + ',' + col3[0].text, '\n')

# This is where I get the error usually.

        with open('bugzilla.csv', 'w') as f:
            f.write(id_list[i][j] + ',' + col1[0].text + ',' + col2[0].text + ',' + col3[0].text, '\n')


    print('Batch of 5')

f.close()

«»»

0
Justin Burack 4 Окт 2019 в 13:36
1
Итак, что произойдет, если любой из ваших операторов driver.find_elements_by_xpath (...) вернет пустой результат? Вы жестко проверяете наличие элемента «0» для каждого из них, но нет никакой гарантии, что какой-либо / все действительно имеют элементы.
 – 
J. Murray
4 Окт 2019 в 13:47
Когда я печатаю вывод, я вижу только «Element1», «Element3». Думаю, мне нужно найти способ вернуть строку nan, когда это произойдет.
 – 
Justin Burack
4 Окт 2019 в 13:59
1
@JustinBurack, вы можете использовать try / except для этого.
 – 
chitown88
4 Окт 2019 в 14:07

1 ответ

Вот

print(id_list[i][j] + ',' + col1[0].text + ',' + col2[0].text + ',' + col3[0].text, '\n')

Вы работаете с вашим id_list, как с двумерным массивом, в то время как ранее вы определяете его как

id_list = []
for i in range(50):
    id_list.append(ids[i].text)

Вы, вероятно, имели в виду: print(new_id_list[i][j] + ',' + col1[0].text + ',' + col2[0].text + ',' + col3[0].text, '\n')

0
Alexey R. 4 Окт 2019 в 18:48