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

как мне cделать чтобы title(заголовки значении) были в заголовках, а bower(характеристики значении) в самих ячейках (в excel)? характеристики могут быть разными и чтобы не повторялись

вот например есть характеристика напряжение - 380 В нужно что бы "напряжение" было заголовком , а "380 В" в значениях(самой ячейке)

проблема том что эти характеристики могут быть не по порядку, и могут быть в разных рядах и разные характеристики.

я вот думаю их сделать списком(масивом) и нужен какой алгоритм если повтор то он добовляет в эту строку, а если новая то создает новую строку.

Вот сам код от куда парсю

<div class="tab-pane                 techdata product-collateral__techdata active" id="techdata">    <ul>
                <li><span>Маркировка по взрывозащите</span><span>нет</span></li>
                <li><span>Тип контактов</span><span>НЗ</span></li>
                <li><span>Расстояние между магнитом и герконом, мм:</span><span></span></li>
                <li><span>- при размыкании контактов, более</span><span>45</span></li>
                <li><span>- при замыкании контактов, менее</span><span>12.7</span></li>
                <li><span>Максимально допустимые токи и напряжения:</span><span></span></li>
                <li><span>- максимальное коммутируемое напряжение, В</span><span>72</span></li>
                <li><span>- максимальный коммутируемый ток, А</span><span>0.3</span></li>
                <li><span>Степень защиты</span><span>-</span></li>
                <li><span>Диапазон рабочих температур, °С</span><span>-50…+50</span></li>
                <li><span>Габаритные размеры, мм:</span><span></span></li>
                <li><span>- корпус геркона</span><span>58х11х11</span></li>
                <li><span>- корпус магнита</span><span>58х11х11</span></li>
                <li><span>Масса, не более, кг</span><span>-</span></li>
        </ul>
        </div>


сам код парсера

from urllib.request import urlopen
from urllib.parse import urljoin

from lxml.html import fromstring


URL = 'http://www.tinko.ru/c-3.html?limit=100&no_cache=true&p=l'
ITEM_PATH = ' .info-block .product-name'
DESCR_PATH = '.breadcrumb .active'

HARET_PATH = '#techdata li'
def parse_courses():
f = urlopen(URL)
list_html = f.read().decode('utf-8')
list_doc = fromstring(list_html)

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

    course = { 'name': name, 'href': href}

    details_html = urlopen(href).read().decode('utf-8')
    try:
        details_doc = fromstring(details_html)
    except XMLSyntaxError:
        contine


    descr_elem = details_doc.cssselect(DESCR_PATH)[0]
    descr = descr_elem.text_content()

    for haret_elems in details_doc.cssselect(HARET_PATH):
        title = haret_elems.cssselect('span')[0]
        title = title.text_content()


    for haret_elems in details_doc.cssselect(HARET_PATH):
        bower = haret_elems.cssselect('span')[1]
        bower = bower.text_content()
        print(bower)


def main():
    parse_courses()


if __name__ == '__main__':
    main()
  • Вопрос задан
  • 2105 просмотров
Решения вопроса 1
@nirvimel
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 = 'http://www.tinko.ru/c-3.html?limit=100&no_cache=true&p=l'
ITEM_PATH = ' .info-block .product-name'
DESCR_PATH = '.breadcrumb .active'

HARET_PATH = '#techdata li'


def parse_courses():
    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)]

        for haret_elems in details_doc.cssselect(HARET_PATH):
            spans = haret_elems.cssselect('span')
            title = spans[0].text_content()
            bower = spans[1].text_content()
            haret_elems_list.append((title, bower))

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

    writer = ExcelWriter('tinko_ru_price_list.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='tinko.ru price list', header=True, index=False)
    writer.save()


def main():
    parse_courses()


if __name__ == '__main__':
    main()

Вот вам готовый парсер tinko.ru с выгрузкой в Excel (проверял только в offline на странице с диска).
Как теперь гонорар делить будем? ;)

UPD: Подправлено.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы