Python парсинг (строки характеристик)?

у меня при парсинге характеристик парсится только первая строчка, как сделать что бы парсились все строчки?
html файл https://www.dropbox.com/s/c2di2sb3i3hhpkm/layta.ht...
from urllib.request import urlopen # for Python 3
# from urllib2 import urlopen  # for Python 2

from lxml.etree import XMLSyntaxError
from lxml.html import fromstring
from pandas import DataFrame, ExcelWriter

URL = 'file:///home/artddss/PycharmProjects/untitled2/layta.html'
ITEM_PATH = 'a'
DESCR_PATH = '.wrapper h1'
HARET_PATH = '#product_specifications dt'
HXARET_PATH = '#product_specifications dd'

def parse_courses():
    global xar
    f = urlopen(URL)
    list_html = f.read().decode('utf-8')
    list_doc = fromstring(list_html)

    df = DataFrame(columns=('name', 'description', 'href'))

    for elem in list_doc.cssselect(ITEM_PATH):
        a = elem.cssselect('a')[0]
        href = a.get('href')
        name = a.text

        details_html = urlopen(href).read().decode('utf-8')

        try:
            details_doc = fromstring(details_html)
        except XMLSyntaxError:
            continue

        description = details_doc.cssselect(DESCR_PATH)[0].text_content()

        haret_elems_list = [('name', name), ('description', description), ('href', href)]
        #характеристики
        xariki = details_doc.cssselect(HARET_PATH)[0].text_content() 
        xariky = details_doc.cssselect(HXARET_PATH)[0].text_content()
        haret_elems_list.append((xariki, xariky))


        df = df.append(dict(haret_elems_list), ignore_index=True)

    writer = ExcelWriter('layta.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='layta', header=True, index=False)
        writer.save()

def main():
    parse_courses()


if __name__ == '__main__':
    main()


html код
<div class="block" id="product_specifications">
			<h2>Характеристики Hikvision DS-2CD2642FWD-IS:</h2>
			<dl>

										<dt>Габаритные размеры, мм</dt>
						<dd>95x105x258.6</dd>
											<dt>Горизонтальный угол обзора Max, ° </dt>
						<dd>98</dd>
											<dt>Горизонтальный угол обзора Min, ° </dt>
						<dd>30.5</dd>
											<dt>Дальность ИК подстветки, м</dt>
						<dd>30</dd>
											<dt>Максимальное разрешение</dt>
						<dd>2688x1520</dd>
											<dt>Масса, кг</dt>
						<dd>1.2</dd>
											<dt>Напряжение питания, В</dt>
						<dd>12DC</dd>
											<dt>Поддержка Full HD</dt>
						<dd>Да</dd>
											<dt>Поддержка HD</dt>
						<dd>Да</dd>
											<dt>Производитель</dt>
						<dd>Hikvision</dd>
											<dt>Рабочая температура °C</dt>
						<dd>-40...+60</dd>
											<dt>Размер матрицы</dt>
						<dd>1/3</dd>
											<dt>Режим "День/Ночь"</dt>
						<dd>Механический ИК-фильтр</dd>
											<dt>Режим архивации</dt>
						<dd>Micro SD</dd>
											<dt>Сетевые порты</dt>
						<dd>10/100</dd>
											<dt>Сетевые протоколы</dt>
						<dd>TCP/IP, HTTP, DHCP, DNS, DDNS, RTP, RTSP, PPPoE, SMTP, NTP, SNMP, HTTPS, FTP, 802.1x, Qos (SIP, SRTP, IPv6 опционально)</dd>
											<dt>Скорость записи, к/с</dt>
						<dd>25</dd>
											<dt>Степень защиты</dt>
						<dd>IP66</dd>
											<dt>Тип корпуса камер</dt>
						<dd>Стандартные</dd>
											<dt>Тип матрицы</dt>
						<dd>CMOS</dd>
											<dt>Тип объектива</dt>
						<dd>Вариофокальные</dd>
											<dt>Тревожные входы</dt>
						<dd>1</dd>
											<dt>Тревожные выходы</dt>
						<dd>1</dd>
											<dt>Уличная</dt>
						<dd>Да</dd>
											<dt>Фокусное расстояние объектива Max, мм</dt>
						<dd>12</dd>
											<dt>Фокусное расстояние объектива Min, мм</dt>
						<dd>2.8</dd>
											<dt>Формат сжатия видео сигнала</dt>
						<dd>Н.264/ MJPEG/ H.264+</dd>
					
			</dl>
		</div>
  • Вопрос задан
  • 1014 просмотров
Решения вопроса 1
madcat1991
@madcat1991
Если я правильно понимаю вопрос, то проблема что вы всегда берете только первую характеристику при парсинге страницы с характеристиками:

#характеристики
xariki = details_doc.cssselect(HARET_PATH)[0].text_content() 
xariky = details_doc.cssselect(HXARET_PATH)[0].text_content()
haret_elems_list.append((xariki, xariky))


Должен быть цикл по всем details_doc.cssselect(HARET_PATH) / details_doc.cssselect(HXARET_PATH)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы