Парсинг Selenium — странное поведение кода ⇐ Python
-
Гость
Парсинг Selenium — странное поведение кода
Я создал код для очистки этого веб-сайта: https://www.interpol.int/How-we-work/No ... ed-Notices
Код должен выполнить итерацию для каждой страны по параметру «Национальность», а внутри выбранной страны он должен снова выполнить итерацию для определения возраста от 18 до 100 лет; собирая имя, возраст и страну каждого человека.
Проблема: после запуска кода и завершения своей работы результирующий файл CSV содержит неверную информацию. Например: на веб-сайте есть 10 результатов поиска по Афганистану, но в CSV я могу найти результаты из Сальвадора, Суринама и т. д. плюс повторяющиеся результаты.
Это мой первый проект с использованием Selenium, и я не могу понять, почему в файле так много ошибок.
Может кто-нибудь мне помочь, пожалуйста?
Код (код на английском языке, но комментарии на португальском, поскольку я работаю в бразильской компании):
# Установить пакеты !pip установить веб-менеджер веб-драйверов !pip установить панды Конда установить селен # Импортные библиотеки из веб-драйвера импорта селена из службы импорта selenium.webdriver.chrome.service из импорта selenium.webdriver.support.ui Выберите импортировать панд как pd время импорта из webdriver_manager.chrome импортировать ChromeDriverManager из selenium.webdriver.common.by импортировать из selenium.webdriver.support.ui импортировать WebDriverWait из selenium.webdriver.support импортируйте ожидаемые_условия как EC # Установка веб-драйвера сервис = Сервис(ChromeDriverManager().install()) # Абрир аба Веб драйвер = webdriver.Chrome(сервис=сервис) # Локализовать веб-сайт и ввести его веб-сайт = 'https://www.interpol.int/How-we-work/No ... ed-Notices' driver.get (веб-сайт) # Максимизар аба Веб driver.maximize_window() # Неявное ожидание в течение 5 секунд для рендеринга страницы после завершения время.сон(5) # Локализовать бота и добавить файлы cookie на страницу search_button = driver.find_element(by='xpath', value="//i[@class='privacy-cookie-banner__icon-close']") search_button.click() # Назовите списки, которые помогут вам получить информацию о том, что мы запрашиваем. имя = [] возраст = [] страна = [] страна_2 = [] test = ['Афганистан'] # Найдите все страны, не выбирая национальную принадлежность на странице и прикрепив ее к списку стран_2 select_countries = Select(driver.find_element(by='xpath', value='//select[@id="национальность"]')) для опции в select_countries.options: страна_2.append(option.text) # Удаление первого элемента из списка Country_2 (é um elemento vazio) страна_2.pop(0) # Итера земель в списке стран_2 за оплату в тесте: select_countries.select_by_visible_text(pais) # Цикл между 18 и 100 годами назад для возраста в диапазоне (18, 100): min_age_input = driver.find_element(by='xpath', value='//input[@id="ageMin"]') min_age_input.clear() # Освободите поле от минимального ожидания min_age_input.send_keys(str(age)) # Вставка минимального значения max_age_input = driver.find_element(by='xpath', value='//input[@id="ageMax"]') max_age_input.clear() # Освобождение от поля максимального идаде max_age_input.send_keys(str(age)) # Вставка максимального значения # Локализация или кнопка пески и клика неле search_button = driver.find_element(by='xpath', value="//button[@id='submit' and @type='submit']") search_button.click() # Локализация или элемент разбиения на страницы с использованием XPath разбиение на страницы = driver.find_element(by='xpath', value='//div[contains(@id, "paginationPanel")]') # Локализация всех элементов внутри элемента нумерации страниц страницы = pagination.find_elements(by='xpath', value='.//li') # Получить номер первой и последней страницы начальная_страница = 1 # Прежде чем обращаться к "pages[-2]", убедитесь, что в "pages" есть как минимум два элемента. если len(страниц) >= 2: последняя_страница = int(страницы[-2].текст) еще: последняя_страница = начальная_страница # Цикл для просмотра всех страниц сайта в то время как начальная_страница
Я создал код для очистки этого веб-сайта: https://www.interpol.int/How-we-work/No ... ed-Notices
Код должен выполнить итерацию для каждой страны по параметру «Национальность», а внутри выбранной страны он должен снова выполнить итерацию для определения возраста от 18 до 100 лет; собирая имя, возраст и страну каждого человека.
Проблема: после запуска кода и завершения своей работы результирующий файл CSV содержит неверную информацию. Например: на веб-сайте есть 10 результатов поиска по Афганистану, но в CSV я могу найти результаты из Сальвадора, Суринама и т. д. плюс повторяющиеся результаты.
Это мой первый проект с использованием Selenium, и я не могу понять, почему в файле так много ошибок.
Может кто-нибудь мне помочь, пожалуйста?
Код (код на английском языке, но комментарии на португальском, поскольку я работаю в бразильской компании):
# Установить пакеты !pip установить веб-менеджер веб-драйверов !pip установить панды Конда установить селен # Импортные библиотеки из веб-драйвера импорта селена из службы импорта selenium.webdriver.chrome.service из импорта selenium.webdriver.support.ui Выберите импортировать панд как pd время импорта из webdriver_manager.chrome импортировать ChromeDriverManager из selenium.webdriver.common.by импортировать из selenium.webdriver.support.ui импортировать WebDriverWait из selenium.webdriver.support импортируйте ожидаемые_условия как EC # Установка веб-драйвера сервис = Сервис(ChromeDriverManager().install()) # Абрир аба Веб драйвер = webdriver.Chrome(сервис=сервис) # Локализовать веб-сайт и ввести его веб-сайт = 'https://www.interpol.int/How-we-work/No ... ed-Notices' driver.get (веб-сайт) # Максимизар аба Веб driver.maximize_window() # Неявное ожидание в течение 5 секунд для рендеринга страницы после завершения время.сон(5) # Локализовать бота и добавить файлы cookie на страницу search_button = driver.find_element(by='xpath', value="//i[@class='privacy-cookie-banner__icon-close']") search_button.click() # Назовите списки, которые помогут вам получить информацию о том, что мы запрашиваем. имя = [] возраст = [] страна = [] страна_2 = [] test = ['Афганистан'] # Найдите все страны, не выбирая национальную принадлежность на странице и прикрепив ее к списку стран_2 select_countries = Select(driver.find_element(by='xpath', value='//select[@id="национальность"]')) для опции в select_countries.options: страна_2.append(option.text) # Удаление первого элемента из списка Country_2 (é um elemento vazio) страна_2.pop(0) # Итера земель в списке стран_2 за оплату в тесте: select_countries.select_by_visible_text(pais) # Цикл между 18 и 100 годами назад для возраста в диапазоне (18, 100): min_age_input = driver.find_element(by='xpath', value='//input[@id="ageMin"]') min_age_input.clear() # Освободите поле от минимального ожидания min_age_input.send_keys(str(age)) # Вставка минимального значения max_age_input = driver.find_element(by='xpath', value='//input[@id="ageMax"]') max_age_input.clear() # Освобождение от поля максимального идаде max_age_input.send_keys(str(age)) # Вставка максимального значения # Локализация или кнопка пески и клика неле search_button = driver.find_element(by='xpath', value="//button[@id='submit' and @type='submit']") search_button.click() # Локализация или элемент разбиения на страницы с использованием XPath разбиение на страницы = driver.find_element(by='xpath', value='//div[contains(@id, "paginationPanel")]') # Локализация всех элементов внутри элемента нумерации страниц страницы = pagination.find_elements(by='xpath', value='.//li') # Получить номер первой и последней страницы начальная_страница = 1 # Прежде чем обращаться к "pages[-2]", убедитесь, что в "pages" есть как минимум два элемента. если len(страниц) >= 2: последняя_страница = int(страницы[-2].текст) еще: последняя_страница = начальная_страница # Цикл для просмотра всех страниц сайта в то время как начальная_страница
Мобильная версия