Ответы пользователя по тегу Парсинг
  • Нужно спарсить таблицу с сайта?

    @alexandersidorevitch
    Студент
    Получается что-то типо того
    import json
    
    import requests
    from bs4 import BeautifulSoup
    
    URL = 'https://opi.dfo.kz/p/ru/DfoObjects/objects/teaser-view/25720?RevisionId=0&ReportNodeId=2147483637&PluginId=6c2aa36248f44fd7ae888cb43817d49f&ReportId=61005620'
    HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0',
               'accept': '*/*'}
    
    
    def get_html(url, params=None):
        # Получение объекта Response
        r = requests.get(url, headers=HEADERS, params=params)
        return r
    
    
    def get_content(html):
        # Получение объекта BeautifulSoup
        soup = BeautifulSoup(html, 'lxml')
    
        # Парсинг название заголовков
        table_headers = tuple(map(lambda elem: elem.get_text(strip=True), soup.select('table.dsnode-table thead tr td')))
        # Пасринг строк таблицы
        table_strings = tuple(map(lambda elem: elem, soup.select('table.dsnode-table tbody tr')))
    
        # Компоновка информации в массив словарей
        table = [{header: element_table.get_text(strip=True) for header, element_table in
                  zip(table_headers, string.select('td'))} for string in table_strings]
        return table
    
    
    def parse():
        html = get_html(URL.strip())
    
        # Проверка на получение успешного ответа с сервера
        if html.ok:
            try:
                data = get_content(html.text)
                write_to_file(data)
            except Exception as ex:
                print(ex)
        else:
            print('Error connection')
    
    
    def write_to_file(data):
        with open(f"{input('Введите название файла: ')}.json", "w", encoding="utf-8") as write_file:
            json.dump(data, write_file, ensure_ascii=False, indent=4)
    
    
    parse()
    Ответ написан
    Комментировать
  • Как распарсить из img нужный мне title?

    @alexandersidorevitch
    Студент
    Ну есть 4 варианта, как это сделать

    #previous code

    1) 'sticker': item.find('div', class_='i-inscribed').find('img').get('title')
    2) 'sticker': item.find('div', class_='i-inscribed').find('img')['title']
    3) 'sticker': item.select_one('div.i-inscribed > img').get('title')
    4) 'sticker': item.select_one('div.i-inscribed > img')['title']

    #next code

    Точнее 6..

    5) 'sticker': item.select_one('div.i-inscribed img').get('title')
    6) 'sticker': item.select_one('div.i-inscribed img')['title']

    В метод select_one (select для множественного выбора) нужно передать селектор CSS.
    Про селекторы можно почитать тут
    Ответ написан
    1 комментарий