• Как распарсить json в Python?

    @gill-sama
    ну или для вашего случая
    for k in test['set']['item']:
        print(k['i']['n'])
    Ответ написан
    3 комментария
  • Как создать свою команду в Linux?

    NullByte
    @NullByte
    Bad gateway
    для этого создайте постоянный алиас:
    echo 'alias android="cd /opt/android-studio/bin/; ./studio.sh"' >> ~/.bashrc

    эта команда запишет в файл конфига bash ваш постоянный собственный алиас к необходимой команде (или нескольким через знак ";"). т.е. если будете вбивать "android" от имени своего юзера, то автоматом в данном случае будет осуществлен переход в нужную директорию и запускаться Андроид Студио. я думаю это самый простой способ :)
    Ответ написан
    Комментировать
  • UnicodeEncodeError: 'ascii' codec can't encode character '\u2013' in position 49: ordinal not in range(128)?

    sim3x
    @sim3x
    Используй requests вместо urlopen, когда нужно взять контент и работать с ним в питоне
    Когда работаешь с lxml, то лучше, чтоб он сам брал страницу, а уже потом ты преобразовывал то что выгреб со страницыв юникод

    Или комбинировать в таком виде
    res = requests.get(url)
    doc = lxml.html.parse(res.content)
    Ответ написан
    1 комментарий
  • UnicodeEncodeError: 'ascii' codec can't encode character '\u2013' in position 49: ordinal not in range(128)?

    urtow
    @urtow
    *nix, python, QA, bagpipe, folk music
    UnicodeEncodeError: 'ascii' codec can't encode character '\u2013' in position 49: ordinal not in range(128)


    Говорит о том что ты пытаешься перенести в кодировку ascii символ, который есть только в UTF8 - '\u2013' , это символ длинного тире:

    python3
    Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
    ...
    >>> a1 =  '\u2013'
    >>> a1
    '–'


    Как это исправить - не использовать ascii, либо перед encode заменить все \u2013 на ascii тире
    Ответ написан
    6 комментариев
  • Python парсинг сайта (характеристики)?

    @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: Подправлено.
    Ответ написан
    8 комментариев