Ответы пользователя по тегу Парсинг
  • Как парсить многоуровневые формы?

    angru
    @angru
    Если элементы селектов могут произвольно комбинироваться между собой, т.е. каждый с каждым, то все очень просто, получаем данные формы, не важно как, простой или ajax-запрос, комбинируем все элементы, затем отправляем запрос для каждой комбинации. кусок кода чтобы понять принцип:

    print([[x, y, z] for x in range(3) for y in range(3) for z in range(3)])
    
    # ну или на привычных циклах
    res = []
    
    for x in range(3):
        for y in range(3):
            for z in range(3):
                res.append([x, y, z])
    
    print(res)


    Если же элементы комбинируются по определенным правилам, нужно строить какой-нибудь граф комбинаций.
    Ответ написан
    1 комментарий
  • Python 3.+ парсер ресурса с выводом из БД на GUI. Как лучше реализовать?

    angru
    @angru
    Вариантов много:

    1. requests + lxml
    2. scrapy
    3. grab

    Только не понятно откуда все-таки данные грабить, из БД или какого-то закрытого ресурса. Парсер обычно не выносит никакие данные из БД в GUI, его задача: залезть на какой-нибудь ресурс, достать оттуда данные, преобразовать их структуру и сохранить в БД, xml, csv, json...

    Почему бы просто не сохранять в csv, а в качестве GUI использовать Excel?
    Ответ написан
    4 комментария
  • Как достать данные?

    angru
    @angru
    Никогда не приходилось парсить такие сайты, не завидую вам.
    Как вам уже советовали откройте исходник странички, там немного другая струстура, например нет tbody.
    Также корневой элемент это html, так что его не надо указывать в xpath.

    У меня получился тот еще говнокод:

    import lxml.html as html
    import requests
    from lxml import etree
    from lxml.html import HTMLParser
    
    
    info = {}
    r = requests.get("http://www.world-art.ru/animation/manga.php?id=501")
    
    if r.ok:
        tree = etree.fromstring(r.text, parser=HTMLParser())
    
        info["name"] = tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]/font[1]/b")[0].text
        info["year"] = tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]/font[2]")[0].text
        info["name1"] = str(etree.tostring(tree.xpath("body/table/tr[1]/td/center/table[7]/tr/td/table/tr/td[5]/table[2]/tr/td[3]")[0])).split('<br/>')[1]
    
        print(info)
    Ответ написан
    Комментировать
  • Что я делаю не так?

    angru
    @angru
    вам бы питон подучить, я такого кода вообще никогда не видел.

    import json
    from pprint import pprint
    from collections import defaultdict
    
    import requests
    
    
    BASE_URL = 'http://rt44.ru/rotator.php'
    
    
    def get_context_ajax(html):
            headers = {
                'Origin': 'http://tovaripohudeniya.ru',
                'Accept-Encoding': 'gzip, deflate',
                'Accept-Language': 'en-US,en;q=0.8,ru;q=0.6',
                'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
                'Accept': '*/*',
                'Referer': 'http://tovaripohudeniya.ru/',
                'Connection': 'keep-alive',
                'Content-Length': '0',
                'Cache-Control': 'max-age=0',
            }
    
            r = requests.post(html, headers=headers)
            
            if r.ok:
                return json.loads(r.text)
        
            return []
    
    
    if __name__ == '__main__':
        content = get_context_ajax(BASE_URL)
        img_info = {}
    
        if content:
            imgs = {item['img_path'] for item in content}
    
            for item in content:
                img_info[item['bot_text']] = imgs.difference([item['img_path']])
    
        pprint(img_info)


    это конечно если я все правильно понял, остальное вообще не нужно.

    P.S. если это фриланс - пожалейте себя и заказчика, откажитесь, подтяните питон в частности и программирование в целом.
    Ответ написан
    Комментировать
  • Как получить доступ к Ajax контенту во время парсинга?

    angru
    @angru
    Берете браузер, открываете инструмент разработчика(F12 обычно), вкладка Networking, ставите фильтр на XHR запросы, обновляете страницу, если нужно куда-то нажать, чтобы выполнился Ajax - нажимаете. Все что нужно должно отобразиться на панели запросов, также там есть вся нужная информация по запросу(заголовки, параметры, ответ), изучаете апи и сами делаете такие же запросы из питона.
    Ответ написан
    1 комментарий