#python #selenium #selenium-webdriver #web-scraping
#python #selenium #selenium-webdriver #веб-очистка
Вопрос:
Я новичок в python и веб-очистке, но мне захотелось взять на себя такую задачу, как эта. Не могли бы вы, пожалуйста, взглянуть на мой код и определить, что именно я делаю неправильно: код просто продолжает печатать «Null», когда я знаю, что есть данные, которые он должен выбрать. Кроме того, он выдает исключение тайм-аута после двух или трех циклов. Пожалуйста, помогите мне. Я действительно застрял.
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from time import sleep
import csv
filename = "Websites.csv"
with open(filename, 'w', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Name", "Website"])
driver = webdriver.Chrome("C:/Users/Hp/Downloads/chromedriver.exe")
myurl = "https://portal-akh.de/bueroverzeichnis/liste/suchergebnisse.php"
driver.get(myurl)
Row_Num = range(2,3412)
for i in Row_Num:
Rows = driver.find_elements_by_xpath("//table[@class='table suchergebnisse']/tbody/tr")
try:
Rows[i].click()
Name = driver.find_element_by_xpath("//div[@class='modal hide fade in']/div/h3/font/font")
Website = driver.find_element_by_xpath("//div[@class='modal hide fade in']/div[@class='modal-body']/p/a").get_attribute('href')
with open(filename, 'a', encoding='utf-8') as file:
file.write(Name.text "," Website "n")
except AttributeError:
print('Null')
with open(filename, 'a', encoding='utf-8') as file:
file.write("Null" "n")
except NoSuchElementException:
print('Null')
with open(filename, 'a', encoding='utf-8') as file:
file.write("Null" "n")
finally:
el = WebDriverWait(driver, 10).until(lambda d: d.find_element_by_xpath("//div[@class='modal hide fade in']/div/button[@type='button']"))
el.click()
sleep(10)
driver.close()
file.close()```
Traceback (most recent call last):
File "d:DocumentsData Science amp; AnalyticsPycharmProjectsSeleniumMember Scrape.py", line 41, in <module>
el = WebDriverWait(driver, 10).until(lambda d: d.find_element_by_xpath("//div[@class='modal hide fade in']/div/button[@type='button']"))
File "C:UsersHpAppDataLocalProgramsPythonPython39libsite-packagesseleniumwebdriversupportwait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Комментарии:
1. Ну, вы маскируете исключения всеми этими исключениями try ….
2. Ваш скрипт не может найти элемент «website»
3. Он просто хочет записать некоторый .text и значение ahref элемента в csv.
Ответ №1:
Я не уверен, из какой ссылки вы извлекаете, но я бы сделал это примерно так. Все, что вам нужно сделать, это проверить, есть ли элемент для захвата с помощью драйвера if.find_element_by_xpath(): затем либо установите для него значение NULL, либо что угодно.
filename = "Websites.csv"
driver.get("https://portal-akh.de/bueroverzeichnis/liste/suchergebnisse.php")
wait = WebDriverWait(driver, 10)
#Bring this outside the loop
Rows = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class='table suchergebnisse']/tbody/tr")))
#Skipped 0
#Make len(Rows) smaller for testing
Row_Num = range(1,len(Rows))
datalist = [[]]
for i in Row_Num:
try:
Rows[i].click()
time.sleep(5)
Name = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='modal hide fade in' and @aria-hidden='false']/div/h3")))
#print(Name.text)
Website='NULL'
#Website = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='modal hide fade in' and @aria-hidden='false']/div[@class='modal-body']/p/a"))).get_attribute('href')
#print(Website)
datalist.append([Name.text,Website])
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='modal hide fade in' and @aria-hidden='false']//button[@class='close']"))).click()
except Exception as e:
#datalist.append(['NULL','NULL'])
print(i,e)
pass
df = pd.DataFrame(datalist,columns =['Name', 'Link'])
print(df)
df.to_csv(filename, index = False)
Выводит
Name Link
None None
Abeling, Sören NULL
Abendroth, Christian NULL
Achilles, Heiko NULL
Импорт
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
Комментарии:
1. Большое спасибо. Извините, что не добавил комментарии к моему коду. Что-то новое узнал. 🙂
2. Спасибо Arundeep. Ссылки href, которые я пытаюсь получить, находятся не во всех строках. Они встречаются в некоторых, но не во всех. например: строка 32. Как мне изменить код, чтобы захватить их и заполнить «Null» для тех, у кого их нет?
3. Ну, сначала вы проверяете, есть ли driver.find_element_by_xpath(‘yourpath’): тогда вы можете просто установить для него значение ‘null’ вместо этого в else.