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

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Как мне их отуда достать не пойму. Поиск div по заданому класу нечего не дает.

    Их и нет на странице, вы смотрите отрендеренный код, когда python видит исходный. Ctrl+U нажимайте и там ищите. Но как сказали выше, в этом случае понадобится смотреть с каких запросов приходят эти данные
    Ответ написан
  • Парсер не меняет страницу, что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    params={'&p': page}
    Скорее всего тут проблема. Уберите амперсанд
    Ответ написан
    1 комментарий
  • Как возвратить данные парсера в телеграм-бот?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Нужно отправлять данные в виде нормальной строки, либо JSON, если нужен список.

    Для строки, например, можно сделать так:
    def parser():
        url = 'https://stopgame.ru/news'
        HOST = 'https://stopgame.ru'
    
        page = requests.get(url)
    
        soup = BeautifulSoup(page.text, 'lxml')
        TITLE = soup.title.string
        print(TITLE)
    
        ss = soup.find_all('div', class_='item article-summary article-summary-card')
    
        news = []
        for s in ss:
            news.append({'title': s.find('div', class_='caption caption-bold').get_text(strip=True),
            'link': HOST + str(s.find('a').get('href'))})
    
        print(f'Загружено {len(news)} статей с новостями в файл')
        
        pretty_news = ''
        for content in news:
            pretty_news += '{}\n{}\n\n'.format(contnet['title'], contnet['link'])
        return pretty_news
    Ответ написан
    1 комментарий
  • Как парсить ответы с Mail.ru на Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Нажмите F12, откройте вкладку network и посмотрите, какие XHR запросы там есть.

    Спойлер:
    Эндпоинт:
    https://otvet.mail.ru/go-proxy/answer_json

    Пример запроса:
    https://otvet.mail.ru/go-proxy/answer_json?q=%D0%B...
    Ответ написан
    Комментировать
  • Как спарсить ссылку на изображение в инстаграмме через bs4?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Класса KL4Bh нет в коде страницы
    Ответ написан
  • Не могу найти нужные теги, в которых информация (bs4). Что делать?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Распечатайте содержимое
    r.text
    и увидите, что там нет ничего
    Ответ написан
    Комментировать
  • Библиотеки для работы с instagram на Python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Библиотека - InstaPy.
    Не знаю чем BS не угодил правда.

    import requests
    import re
    
    post_url = 'https://www.instagram.com/p/CBaXWGThA3s'
    r = requests.get(post_url)
    image_url = re.search(r'display_url":"(.+?)"', r.text).group(1).replace(r'\u0026', '&')
    
    print(image_url)
    Ответ написан
  • Как получить значение с сайта?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Используйте Beautiful Soup
    Ответ написан
    Комментировать
  • Scrapy парсит не ту страницу?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Посмотрите откуда берутся данные. Там GET подобного вида
    https://steamcommunity.com/market/search/render/?q...
    с замечательным JSON в виде ответа.
    В цикле быстрей перебрать будет, и вид сразу готовый
    Ответ написан
    Комментировать
  • Как запросить данные в ВК от имени запустившего программу?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Как вариант - найти куки от ВК в папке с куками, достать ВК сессию и вставить ее в запрос через какой нибудь requests
    Ответ написан
  • Парсинг динамических сайтов на python?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Данные не берутся из воздуха. Открывайте F12->Network и смотрите с какого запроса они приходят
    Ответ написан
    Комментировать
  • Парсер на питоне не работает, в чем дело?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Откройте ваш сайт
    Нажмите CTRL+U и попробуйте найти класс "cc_cursor". Нашли? Программа тоже нет.
    Замените на
    items = soup.find_all('div', attrs={'class': 'offer-wrapper'})


    ps: вы же эту функцию использовали где-то в коде?
    Ответ написан
    1 комментарий
  • Как перенести куки в python request?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    В сессии автоматически куки прописываются
    Ответ написан
    Комментировать
  • Парсинг AJAX в BeautifulSoup Python?

    SoreMix
    @SoreMix
    yellow
    Сайт заблокирован в РФ, но напишу общие рекомендации, должно работать

    1. Интересно, вы, конечно получаете токен. Он в JSON формате я так понимаю? Подключите библиотеку json и сделайте json.loads(script). Оттуда уже достаньте токен, как из обычного словаря. Так же не верю что скрипт там без аттрибутов, лучше по классу/id/итд получить его
    2. XHR запрос не выглядит полным. Там случайно нет еще каких нибудь параметров?
    3. В XHR заголовки добавьте
    4. Может не обойтись одним user-agent, попробуйте добавить другие, посмотрите какие там есть, может какие нибудь необычные присутствую. Можно попробовать добавить Accept/Referrer и другие.
    Ответ написан
  • Изменились сслыки до документы в ВК (хеши)?

    SoreMix
    @SoreMix
    yellow
    Да, я забыл случайно, редко телеграмом пользуюсь. У меня много хардкода разного, потому что делал разово.

    Сейчас нет возможность склеить все в один файл, могу просто сурсы отдать

    Для начала нужно достать все ссылки, которые есть.
    second.xlsx - название дока с данными из таблицы
    urls.txt - текстовик, куда будут сохранены ссылки на доки вк
    Таблицы разные были по структуре, поэтому тут два варианта, один когда есть просто ссылка на док, второй вариант когда ссылка сделана в виде гипер ссылки

    from openpyxl import load_workbook
    import time
    import re
    
    wb = load_workbook('second.xlsx')
    
    with open('urls.txt', 'w', encoding='utf-8') as f:
    
        for sheetname in wb.sheetnames:
            sheet = wb[sheetname]
    
            for i in range(1, sheet.max_row+1):
                content = sheet.cell(row=i, column=4).value
                if content:
    
                    f.write(content + '\n')
                    
                    '''url = re.search(r'=HYPERLINK\("(.+?)"', content)
                    
                    if url:
                        f.write(url.group(1).split('?')[0] + '\n')'''


    Второй скрипт для парсинга темы и поска всех документов, которые заливали в тему.
    app_id - ID приложения с https://vk.com/apps?act=manage
    login, password - логин и пароль от ВК

    Сначала собираются все доки, затем читаются ссылки, которые сохранили на прошлом шаге.
    Пробегаем по каждому доку, обрезаем его до знака ?, чтобы получить базу, т.е. vk.com/document123_123
    Пробегаем по всем URL из прошлого шага, если базовая часть дока есть в URL, то новая ссылка записывается в файл restored.txt

    import vk_requests
    import time
    import json
    
    app_id = 'todo'
    login = 'todo'
    password = 'todo'
    
    api = vk_requests.create_api(app_id=app_id, login=login, password=password)
    
    
    def get_docs():
    
        all_docs = []
    
        comments_count = api.board.getComments(group_id=135725718, topic_id=34975471, count=1, offset=3)['count']
    
        for x in range(comments_count//100 + 1):
    
            print('Parsing {}/{} page'.format(x, comments_count//100 + 1))
    
            comments = api.board.getComments(group_id=135725718, topic_id=34975471, count=100, offset=x * 100)['items']
    
            for comment in comments:
                attachments = comment.get('attachments', None)
    
                if attachments:
                    for attachment in attachments:
                        if attachment['type'] != 'doc':
                            continue
                        
                        attachment_url = attachment['doc'].get('url', None)
    
                        if attachment_url:
                            all_docs.append(attachment_url)
    
            time.sleep(0.3)
    
        return all_docs
    
    
    
    if __name__ == '__main__':
        
        docs = get_docs()
    
        with open('urls.txt', 'r', encoding='utf-8') as f:
            urls = f.readlines()
    
        with open('restored.txt', 'w', encoding='utf-8') as f:
            for doc in docs:
                base_doc = doc.split('?')[0]
    
                for url in urls:
                    if base_doc in url:
                        f.write(doc + '\n')


    Последний скрипт читает исходный файл с таблицей, читает все ссылки из прошлого шага. Пробегает по всем колонкам с ссылками, если база этой ссылки есть в списке восстановленых ссылок, то ячейка перезаписывает на восстановленую ссылку. Далее сохраняется

    second.xlsx - таблица с данными
    restored.txt - файл с новыми ссылками из прошлого шага

    from openpyxl import load_workbook
    import re
    
    
    wb = load_workbook('second.xlsx')
    
    with open('restored.txt', 'r', encoding='utf-8') as f:
        restored_urls = f.readlines()
    
    
    for sheetname in wb.sheetnames:
        sheet = wb[sheetname]
    
        for i in range(1, sheet.max_row+1):
            content = sheet.cell(row=i, column=4).value
    
            if content:
                url = content
                base_url = url.split('?')[0]
    
                for restored_url in restored_urls:
                    if base_url in restored_url:
                        sheet.cell(row=i, column=4).value = restored_url
                
            
            '''if content:
                url = re.search(r'=HYPERLINK\("(.+?)"', content)
                    
                if url:
                    base_url = url.group(1).split('?')[0]
    
                    for restored_url in restored_urls:
                        if base_url in restored_url:
                            cell_text = '=HYPERLINK("{}";"Скачать")'.format(restored_url)
                            sheet.cell(row=i, column=4).value = cell_text'''
    
    
    wb.save('restored2.xlsx')
    Ответ написан
  • Как осуществить такой парсер( "вечный парсер")?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Нужно смотреть как именно контент появляется на сайте.

    1. Либо сайт постоянно шлет запросы на специальный эндпоинт для получения обновлений, оттуда берет их и добавляет на сайт
    2. Сайт получает обновления через вебсокет
    3. Статистика не обновляется в лайв режиме, а появляется после обновления страницы.

    Для каждой из ситуаций будет разный подход
    Ответ написан
  • Как сделать парсер никнеймов из чата?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    .superuser вложен в <a>, а не наоборот.

    for el in html.select('.msg'):
        title = el.select('a > .superuser')
        if title:
            print( title[0].text )


    ps: спойлер - весь чат, скорее всего, фейковый. И сильно сомневаюсь, что он будет каждый раз обновляться в коде страницы. Если уж нужны ники постоянно, то лучше POST слать на update.php endpoint со всеми данными
    Ответ написан
    Комментировать
  • Изменились ссылки на документы и файлы ВК?

    SoreMix
    @SoreMix
    yellow
    Ссылка на табличку сломалась. Думаю, можно восстановить. Сделайте ссылку правильную

    upd:
    нашел ссылку, сейчас гляну

    upd2:
    хэши поменялись, помогу восстановить

    upd3:
    таблицы теперь живы
    Ответ написан
    8 комментариев
  • Сохранить как html, через python, как?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Ваши товары отображаются после JS рендера. Обычные запросы на сайт (через requests и тд) не выполняют JS код. Как requests видит страницу можете посмотреть через CTRL + U. Если смотреть через RightClick -> Inspect Element, то вы видите уже отрендереный код.

    Если нажать F12 -> Network, обновить страницу и открыть XHR запросы, будет видно, что все товары ищутся через запрос
    https://brain.com.ua/search/1187/?Search=10750&Offset=0

    и
    https://brain.com.ua/search/142/?Search=10750&Offset=0


    Где 1187 и 142 это категории, насколько я понимаю, а 10750 - ваш поисковой запрос. Оффсет понятно.

    Так что у вас два варианта:
    1. Делать запросы по примеру как я отправил выше и парсить их товары с ответа
    2. Открывать нужную страницу через селениум и сохранять код. Думаю, в селениуме есть такой вариант
    Ответ написан