Парсинг страницы пр и помощи selenium webdriver Chrome

Rodion

Новичок
Пользователь
Май 8, 2020
18
2
3
Доброго времени суток ;)
Возникала нужда про парсить характеристики товара с данного сайта \
Снимокr.PNG

Python:
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")
#chrome_options.add_argument("--no-sandbox") # linux only
chrome_options.add_argument("--headless")
# chrome_options.headless = True # also works
driver = webdriver.Chrome(options=chrome_options)
catalog = []
with open('url.txt','r')as f:
    for url in f:
        catalog.append(url)

catalog = catalog[:3]
for url in catalog:
    driver.get(url)  
    har = str(driver.find_element_by_xpath("table@calss[props_list]//tr@itemprop=['additionalProperty']").text)
    open('har.txt', 'a').write(har+'/n')
    print (har)
SyntaxError: Failed to execute 'evaluate' on 'Document': The string 'table@calss[props_list]//tr@itemprop=['additionalProperty']' is not a valid XPath expression.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
В строке:
Python:
har = str(driver.find_element_by_xpath("table@calss[props_list]//tr@itemprop=['additionalProperty']").text)
опечатка: calss (нужно class)
 
  • Мне нравится
Реакции: Rodion

Asgardov

Пользователь
Пользователь
Май 23, 2020
38
10
8
У вас же в тексте ошибки написано неверное выражение xpath.
Проверяйте свои xpath прямо на странице в консоли браузера используя:

JavaScript:
$x("xpath выражение")
 

Rodion

Новичок
Пользователь
Май 8, 2020
18
2
3
В строке:
Python:
har = str(driver.find_element_by_xpath("table@calss[props_list]//tr@itemprop=['additionalProperty']").text)
опечатка: calss (нужно class)
спасибо огромное
 

Rodion

Новичок
Пользователь
Май 8, 2020
18
2
3
как мне правильно составить xpath?
console.log($x("table@class[props_list]"))
Uncaught DOMException: Failed to execute '$x' on 'CommandLineAPI': The string 'table@class[props_list]' is not a valid XPath expression. at <anonymous>:1:13
 

Rodion

Новичок
Пользователь
Май 8, 2020
18
2
3
У вас же в тексте ошибки написано неверное выражение xpath.
Проверяйте свои xpath прямо на странице в консоли браузера используя:

JavaScript:
$x("xpath выражение")
я же вроде правильно написал
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
я же вроде правильно написал
Попробуйте так:
Python:
har = str(driver.find_element_by_xpath("//table[@class='props_list']//tr[@itemprop='additionalProperty']").text)
 

Asgardov

Пользователь
Пользователь
Май 23, 2020
38
10
8
я же вроде правильно написал
Команда для проверки в браузере дана.
То есть:
  1. открываете браузер.
  2. открываете страницу на которой должен быть ваш элемент
  3. открываете консоль разработчика (F12)
  4. И там в консоль вбиваете $x("ваш xpath")
  5. Жмяк на Enter
  6. И смотрим результат.
Если есть то используем то что в кавычках (ваш xpath) для вставки в код.
Это позволяет сэкономить время.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Вот пример получения характеристик с сайта:
Python:
from selenium import webdriver


driver = webdriver.Chrome()

# словарь для характеристик
params = {}
driver.get("https://avitek-i.ru/catalog/zapasnye_chasti_dlya_remonta_inzhenernykh_sistem/zapasnye_chasti_dlya_gorelok/bloki_upravleniya/bloki_upravleniya_goreniem/blok_upravleniya_satronic_dkg_972_mod_21_honeywell/") 

# все названия характеристик
names = driver.find_elements_by_xpath("//table[@class='props_list']//tr[@itemprop='additionalProperty']//span[@itemprop='name']")
# все значения характеристик
values = driver.find_elements_by_xpath("//table[@class='props_list']//tr[@itemprop='additionalProperty']//span[@itemprop='value']")

for i, name in enumerate(names):
    name_text = name.get_attribute('innerHTML')

    try:
        value_text = values[i].get_attribute('innerHTML').strip()
        params[name_text] = value_text
    except Exception as e:
        print(e)

for k, v in params.items():
    print(k, v)

driver.close()
driver.quit()
 

Форум IT Специалистов