A
A
artds2016-01-11 10:01:42
Python
artds, 2016-01-11 10:01:42

Python parsing (feature strings)?

when parsing characteristics, only the first line is parsed, how can I make all lines parsed?
html file 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 code
<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>

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
madcat1991, 2016-01-22
@artds

If I understand the question correctly, then the problem is that you always take only the first feature when parsing a page with features:

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

There should be a loop through all details_doc.cssselect(HARET_PATH) / details_doc.cssselect(HXARET_PATH)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question