Ответы пользователя по тегу Beautiful Soup
  • Почему не выводится результат?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Логика вашего скрипта мне не совсем понятна. В данном случае вы можете получить максимум 2 пользователя, так как я не увидел в вашем коде цикла. Данный скрипт можно упростить, используя css-селекторы (в коде отсутствует обработка ошибок):
    def get_skypes(number):
        epieos_url = 'https://tools.epieos.com/skype.php'
        epieos_params = {'data':number}
        epieos_response = requests.post(epieos_url, data=epieos_params)
        epieos_soup = BeautifulSoup(epieos_response.text, 'html5lib')
    
        users = epieos_soup.select('div.col-md-4.offset-md-4.mt-5.pt-3.border') # Выбираем все div'ы со следующими классами
        for user in users:
            skype_name = user.select('p')[1].text.replace('Name : ','') # Выбираем второй div
            skype_login = user.select('p')[2].text.replace('Skype Id : ','') # Выбираем третий div
    
            print(f'\n<b>Скайп:</b> <a href="https://transitapp.com/redirect.html?url=skype://{skype_login}?chat">{skype_login}</a> | {skype_name}')
    
    get_skypes("79999999999")

    61ef8942e163a211344653.png
    Ответ написан
  • Как выводить все href из всех тэгов?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    F12 -> видим, что запрос нужно отправлять по адресу "https://store.steampowered.com/search/results?term=", например - "https://store.steampowered.com/search/results?term..."

    И ещё можно вынести парсинг в отдельную функцию, чтобы было проще отлаживать:
    from bs4 import BeautifulSoup
    import requests
    
    
    def search_game(title):
    	URL = 'https://store.steampowered.com/search/results'
    
    	games_list = []
    
    	response = requests.get(URL,params={'term':title},headers={'user-agent':'hacked by hottabXP'})
    	soup = BeautifulSoup(response.text,'lxml')
    
    	games = soup.find('div', id='search_resultsRows').find_all('a',class_='search_result_row ds_collapse_flag')
    	for game in games:
    		title = game.find('span',class_='title').text.strip()
    		try: # На случай, если цена со скидкой
    			price = game.find('div',class_='col search_price responsive_secondrow').text.strip()
    		except:
    			price = game.find('strike').text
    		games_list.append({'title':title,'price':price})
    
    	return games_list
    
    print(search_game("GTA 5"))

    [{'title': 'Grand Theft Auto V', 'price': ''}, {'title': 'Grand Theft Auto V: Premium Edition', 'price': '629₴'}, {'title': 'Grand Theft Auto V: Premium Edition & Great White Shark Card Bundle', 'price': '790₴'}, {'title': 'Grand Theft Auto V: Premium Edition & Megalodon Shark Card Bundle', 'price': '1 228₴'}, {'title': 'GTA Online: Shark Cash Cards', 'price': ''}, {'title': 'Grand Theft Auto V - Criminal Enterprise Starter Pack', 'price': '209₴'}, {'title': 'Grand Theft Auto V: Premium Edition & Whale Shark Card Bundle', 'price': '916₴'}, {'title': 'liteCam Game 5:  120 FPS Game Capture + Streamer', 'price': ''}, {'title': 'Assetto Corsa - Dream Pack 1', 'price': '129₴'}, {'title': 'Warhammer 40,000: Dawn of War III', 'price': '599₴'}, {'title': 'Memory Card Monsters - Expanded Content 5', 'price': '21₴'}, {'title': 'Fantasy Memory Card Game - Expansion Pack 5', 'price': '21₴'}, {'title': 'APB Reloaded', 'price': 'Free to Play'}, {'title': 'Shop Tycoon: Prepare your wallet', 'price': '119₴'}, {'title': '3dSunshine', 'price': 'Free'}, {'title': 'Druid', 'price': '20₴'}, {'title': 'Lazaretto', 'price': '129₴'}, {'title': "Rock 'N' Roll Defense", 'price': '21₴'}, {'title': '小黑盒加速器', 'price': 'Free To Play'}, {'title': 'Drop Hunt - Adventure Puzzle', 'price': '20₴'}, {'title': 'Carmageddon Max Pack', 'price': '169₴'}, {'title': 'Lamp Head', 'price': '27₴'}, {'title': 'Need for Drive - Open World Multiplayer Racing', 'price': '21₴'}, {'title': 'Crash Drive 3', 'price': '279₴'}, {'title': 'Retro City Rampage™ DX', 'price': '229₴'}, {'title': 'VCB: Why City 4k', 'price': '67₴'}, {'title': 'CS2D', 'price': 'Free To Play'}, {'title': 'ConflictCraft', 'price': '21₴'}, {'title': 'State of Anarchy: Master of Mayhem', 'price': '20₴'}, {'title': 'Geneshift', 'price': '229₴'}, {'title': '汉武大帝传', 'price': '149₴'}, {'title': 'Fix Me Up Doc! – Dark Humor', 'price': '21₴'}, {'title': 'Extreme Racing on Highway', 'price': '179₴'}, {'title': 'The Last Hope: Trump vs Mafia - North Korea', 'price': '21₴'}, {'title': 'Control Craft 3', 'price': '21₴'}, {'title': 'Zombie Killer Drift - Racing Survival', 'price': '21₴'}, {'title': 'Bugs Must Die / 异星特勤队', 'price': '199₴'}, {'title': 'Control Craft 2', 'price': '21₴'}, {'title': 'Hero Hunters - 杀手 3D 2K19', 'price': '119₴'}, {'title': 'USA Truck Simulator', 'price': '27₴'}, {'title': 'MechDefender - Tower Defense', 'price': '21₴'}, {'title': 'CYBER.one: Racing For Souls', 'price': ''}, {'title': 'VCB: Why City (Beta Version)', 'price': ''}, {'title': 'Mountain Taxi Driver', 'price': '21₴'}, {'title': 'The Kickstarter Avoidance Album', 'price': '21₴'}, {'title': 'Dino Zoo Transport Simulator', 'price': '27₴'}, {'title': 'Snow Clearing Driving Simulator', 'price': '169₴'}, {'title': 'Space Hero Line', 'price': '21₴'}, {'title': 'EDEN STAR', 'price': '279₴'}, {'title': 'liteCam Game: 100 FPS Game Capture', 'price': ''}]
    Ответ написан
    Комментировать
  • Почему find из BeautifulSoup не находит тег?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Тут все просто, как в квантовой физике. Своим скриптом сохраняем ответ реквеста на диск. Далее открываем файл в блокноте и смотрим, есть ли там данный тег с нужным классом. В 99,9% - нет. В таком случае газуем в google курить маны по selenium. Или же можно обойтись без selenium. Способов масса, главное чтобы хватило фантазии.

    Вот один из вариантов(у вас может не сработать, а может и сработать, а завтра сломаться - я не знаю. )
    import requests
    from bs4 import BeautifulSoup
    import json
    
    response = requests.get(
        url='https://play.google.com/store/apps/details?id=ru.mail.mailapp&hl=ru&gl=US&showAllReviews=true',
        headers={'user-agent':'Hacked by HottabXP!'})
    
    soup = BeautifulSoup(response.text,"lxml")
    dirty_comments = soup.find_all('script')[34].string # Методом тыка определяем, что json с коментами хранится
    # в 35 теге <script> и преобразовываем данные внутри тега в строку
    valid_json = dirty_comments[dirty_comments.find(' data:')+6:dirty_comments.find(', sideChannel')] # Вырезаем всё, что
    # находится между data: (плюс 6 символов) и sideChannel
     
    comments_json = json.loads(valid_json) # Тут уже работаем с обычным json
    
    for comment in comments_json[0]:
    	user_comment = comment[4] # Комментарий пользователя
    	try:
    		author_answer = comment[7][1] # Ответ на комментарий пользователя (может быть None)
    	except:
    		author_answer = '' # Если None, тогда в author_answer помещаем пустую строку
    
    	print(user_comment)

    Результат
    После обновления до Android 12 (Samsung One UI) почта перестала открывать письма в приложении. Виден только список, прочитать письма невозможно.
    После обновления, стало ужасным, пароль вводишь по 150 раз, постоянно теряет связь с интернетом, из за этого не возможно отправить вложения, если ничего не поменяться придётся сносить.
    В приложение просто не входит с правильным поролем. Его же копирую в вэб и всё заходит. Старое заходило, нафиг обновил((
    В принципе приложение хорошее, но после обновления рекламный блок стал выводиться на месте первого письма. Это очень неудобно - существенно уменьшает место для списка писем, плюс зачастую по привычке тычешь в рекламу вместо первого письма (возможно, в этом и есть задумка). Ищу альтернативу
    Вы, конечно, пока подумайте. А мы пока удалим ваше приложение и начнем пользоваться другим. Вот вы деревянные! Я ору с вас! Вам конечный пользователь говорит: ребята, я не смотрю и не читаю эту вашу рекламу. Она мне мешает смотреть почту. А в ответ чушь какая-то. Раздражающая почта. Теперь даже рекламу удалить нельзя из входящих писем. Слайд работает, а корзинка нет. Перехожу на оутлук. Удобнее и никакой рекламы. Это майл может себе оставить. Как и колонку с новостями на своей странице.
    Samsung Galaxy S21 - после обновления на Android 12 приложение перестало работать. Моргает и не открывается, либо открывается, но письма прочитать невозможно. Ссылается на то, что не обновлено приложение Android WebView, однако, все обновлено до последнего релиза.
    После того,как почта майл соединилась с сервисом ВК стало хуже. Я уже неделю бьюсь с восстановлением доступа к своей почте, так как забыла пароль. Но мне настойчиво отправляют зайти через ВК.И все попытки безуспешны. Уже нет желания просто работать с данным сервисом. Уважаемые разработчики, прошу вас вернуть возможности восстановления доступа, до соединения с ВК!
    После обновления не открываются письма в приложении. Что интересно после проверки приложения на телефоне, телефон пишет что есть проблема приложения, сбой в работе приложения и отправляет к разработчику. РАЗРАБОТЧИК СКОЛЬКО НУЖНО ЛЮДЕЙ, НАПИСАВШИМ ВАМ О ПРОБЛЕМЕ, ЧТОБЫ ВЫ УСТРАНИЛИ ПРОБЛЕМУ???
    Тут уже много кто писал, что после обновления до андроид 12 и one UI 4.0 на Самсунг приложение перестало открывать письма. Выдаёт ошибку "Ошибка в просмотре webview". Вы пишите ответьте, что надо написать в поддержку, но из приложения этого сделать не возможно. Кода нажимаешь кнопку "написать разработчику" выходит такая же ошибка.
    Здравствуйте, за последний месяц дважды устанавливаю Ваше приложение и оба раза удаляю. Невозможно совершить вход, постоянно пишет соединение. Разработчика нужно выгнать на мороз, и там оставить.
    Приложение не работает после обновления на Андроид 12, более месяца проблема не решается, притензии и замечания разработчикам не рассматриваются и не решаются, похоже майл почта утратила свою актуальность. Всем один ответ, напишите письмо разработчику, а толку...... ответов и решения проблем нет.... . Грядёт развал "майла"........ . Рейтинг приложения не актуален, большинство отзывов 1-2 звезды..... а у них.........!!!
    После обновления стали приходить уведомления "Новости". Мне нужна почта и не более того, мне не нужен браузер внутри почты. Ставлю одну звезду, так как убрать это навязанное новшество невозможно!
    Добрый день. После последнего обновления Samsung S21 перестали открываться письма. При попытке открыть появляется надпись "Ошибка в просмотре webview". Не могу даже войти в разел "Написать разработчику", поэтому пишу здесь.
    Не открывает письма после обновления Android. Пишет ошибка webview. Написать разработчику, как отвечает всем ПОТДЕРЖКА MAIR. RU, невозможно, т. к. вылезает та же ошибка. Хватит уже отвечать подобным образом, думаю, что вы уже и так поняли, что за проблема. Решите её уже.
    некоторые письма автоматически сортируются в папку "рассылки". удалить эту папку невозможно. это неудобно, мне нужно видеть все письма в одном месте, а не лазать по папкам. отвратительное приложение
    Не могу пользоваться приложением, не может зайти в мою почту, вылетает на первой-второй секунде загрузки содержимого входящих писем. Пробовала удалить приложение и переустановить заново.
    До этого была оценка 5 Mail×VK - это начало конца Еще больше рекламы. Уведомления от пульса, которые невозможно закрыть. Писать в службу поддержки не буду) компания загибается, и это хорошо)
    Я бы и минус один поставила, Я помню свой пароль и не могу уже долгое время войти на почту которой активно пользуюсь более 11 лет, из-за того что номер телефона который запрашивает мэил давно уже не!!!! существует, Этого номера украинского аператора у меня нет уже как 5 лет! Что за обсурт! На почте я храню свои документы, важные фото, переписки, кто это все вернет? Я не помню что бы хоть раз приложение запрашивало у меня номер телефона, что за тупые обновления
    Надоедливая реклама, которую убрать не возможно. До последнего обновления было лучше. Ещё несколько раз случайно ткань в эту рекламу и придётся отказываться от этого приложения, а может и от всё продуктов майл, так как владельцев похоже интересует только прибыль, а на пользователей наплевать.
    Уважаемые разработчики, Вы предлагаете написать в поддержку, но когда пытаешься это сделать выскакивает ошибка просмотра webview. Это что за издевательство такое? Решите уже наконец проблему, сколько уже было Вам писем, и никакого решения!
    Уже долгое время приложение не работает. Оно либо выдает окно с предложением обновить Android Webview, либо выдает стробоскопический эффект (экран начинает быстро мигать белым цветом). Android Webview уже обновился. Прошивка на S21 так же обновилась. А приложение по прежнему не работает. Отправить сообщение разработчику из приложения так же не возможно из-за этих ошибок. Письма соответственно так же не возможно поставить. В общем, добавили кучу функций которые не работают.
    Ув. Разработчики! Samsung S21Ultra 5G не работает. 12 Андроид. До последего обновления все работало хорошо, а сейчас "ошибка просмотра webview". Исправьте побыстрее, конкурентов много:). Написать напрямую разработчику нет возможности, приложение не работает. Пожалуйста не пишите про связь с разработчиком, а лучше подумайте, как помочь пользователям приложения и исправить ошибки.
    Приложение отправляет рекламу в уведомлениях телефона, и при этом это уведомление отсутствует в самой программе , или почте. Раньше этого не было. Удаляйте это приложение, а почту лучше проверить через встроенное приложение.
    Ну что же. Поздравляю товарищи. 2 недели ожидания решения проблем, а проблема даже не думает решаться. Писать никуда не буду, задрали уже, всю жизнь что ли разработчику писать? Итог: можете уже ничего не решать, вы очень хорошо поработали, чтоб я удалил ваше приложение и перешел на Яндекс.почту. всем советую, незачем это го....но держать и лишнюю память захламлять. Яндекс наше все)).
    Написали в службу поддержки о проблеме не открывания писем после обновления, пошла 2 неделя нет никакой реакции. Какую работу необходимо оценить, если ничего не сделано, почта так и не работает?
    Ну вы что, не понимаете, что все пользователи Samsung s 21, и возможно других девайсов на 12м андрюше не могу пользоваться приложением. Логи и пр ошибки не получается отправить тк приложение в процессе запуска тупо мерцает на изображении заставки
    Ждал обновления. Думал приложение всё таки заработает на 12 Андроиде и оболочке One UI 4.0, но не тут то было! По-прежнему вылетает. Даже зайти не могу. Тупо мерцание экрана с начальной заставкой.
    ...

    Данная моя приблуда работает через раз, я не смотрел причину. Скорее всего нужно проверять статус код ответа реквеста.

    На сайте jsonviewer.stack.hu можно удобно посмотреть структуру json:61cd9c0aca8c8860493418.png
    Ответ написан
    Комментировать
  • Как спарсить сайт в котором данные подгружаются с сервера?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Как сказал уже Алан Гибизов, не надо вам получать данные с таблички!
    Но если очень хочется, тогда прочитайте свеженькую статейку - Как спарсить любой сайт?
    Ответ написан
    Комментировать
  • Как заменить ссылку внутри тэга img?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Находите нужные теги с помощью find_All(хотя select как по мне проще и красивее).
    Далее обращаетесь к нужным атрибутам найденных тегов. Вот самый простой код:
    from bs4 import BeautifulSoup
    
    html = '''
    <body>
        <img src="https://yandex.com/main.jpg">
    </body>
      '''
    
    soup = BeautifulSoup(html,'html.parser')
    
    tag = soup.img
    tag['src'] = 'https://google.com/main.jpg'
    
    print(soup)

    Результат:
    <body>
    <img src="https://google.com/main.jpg"/>
    </body>
    Ответ написан
    4 комментария
  • Как спарсить все артикулы со страницы с бесконечным скроллом на Beautifulsoup + Selenium?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Скролить категорически не рекомендую! Представьте, что там +100500 страниц. И если скролить, через некоторое время закончится оперативка, и кроме парсера, зависнет еще и компьютер.

    Вместо этого, лучше к ссылке добавить параметр "?page=1" - где число - номер страницы. И в цикле увеличивать число, пока на странице не появится текст вроде - "В этой категории нет ни одного товара."
    Ответ написан
    1 комментарий
  • Здравствуйте, пытаюсь вытащить данные с сайта. Через F12 норм. BS4 выдаёт пустой массив[]. Как вытащить данные?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Скорее всего это колхозный велосипед, но у меня сработал:
    import requests
    import json
    
    html = requests.get('https://xn--80aesfpebagmfblc0a.xn--p1ai/information/').text
    
    start = '<cv-spread-overview :spread-data=' # Начало обрезки
    end = "isolation-data"	# Конец обрезки
    
    raw_json_data = html[html.find(start)+34:html.find(end)-3] # Вырезаем json из html страницы
     
    json_data= json.loads(raw_json_data)
    
    
    for item in json_data:
    
    	title = item['title'] # Город
    	sick = item['sick']	# Выявлено
    	healed = item['healed'] # Выздоровело
    	died = item['died'] # Умерло
    	sick_incr = item['sick_incr'] # Новые
    	healed_incr = item['healed_incr'] #В ыздоровело за сутки
    	died_incr = item['died_incr'] # Умерло за сутки
    
    	print(f'{title} - {sick} - {healed} - {died} - {sick_incr} - {healed_incr} - {died_incr}')

    5fbc353c3f414147571289.png
    Ещё можно некоторые данные оттуда выдрать:
    5fbc35654a76e868601049.png

    Или рендерить js, или доставать данные с json'a:
    5fbc296a033ba367147804.png5fbc2972c05ce925154999.png
    Ответ написан
    3 комментария
  • Почему не парсится текст внутри tag? Что делать?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Текст подставляется js.
    Ответ написан
    Комментировать
  • Почему парсер выводит только первую категорию?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    У вас в коде return tovari не на том уровне.
    В коде так:
    5fa40f23847dc433994007.png
    а надо так:
    5fa40f312ab8b418903304.png
    Ответ написан
    1 комментарий
  • Как избавится от запятой при парсинге данных?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Где???
    Вангую так - после get_text() задействовать replace:
    get_text().replace(',','')
    если будет ошибка, тогда так:
    .text().replace(',','')
    Ну это все гадание на кофейней гуще.
    Ответ написан
    2 комментария
  • Почему парсер выдает ошибку?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Зачем стрелять себе в ногу, если они все отзывы отдают json'ном? Вот простой код:
    import requests
    import json
    
    import requests
    headers = {
        'content-type': 'application/json',
    }
    
    data = '''{"filter":{"rated":"Any",
    					"orderBy":"WithRates",
    					"tag":"",
    					"reviewObjectId":276,
    					"reviewObjectType":"banks",
    					"page":"1",
    					"pageSize":20,
    					"locationRoute":"",
    					"regionId":"",
    					"logoTypeUrl":"banks"
    					}}'''
    
    response = requests.post('https://www.sravni.ru/provider/reviews/list',data=data,headers=headers)
    
    reviews = json.loads(response.text)
    
    total = reviews['total']
    
    print(f'Всего отзывов: {total}')
    
    for review in reviews['items']:
    	title = review['title']
    	text = review['text']
    	print(f'{title} - {text}')

    Так как всего отзывов 8718, а на каждой странице по 20 отзывов - получаем 436 страниц. Меняем параметр page в запросе от 1 до 436 и получаем все отзывы в удобном виде.
    Структура json:
    5f9da3b368e7d183722613.png
    Ответ написан
    Комментировать
  • Как лучше реализовать проверку на новых новостей?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Я делал подобное так: загружал главную страницу сайта(например, на главной есть 20 последних новостей). Сохранял ссылки на страницы новостей в файл. Далее каждые пол часа загружал из файла в список старые ссылки. Потом загружал и парсил опять главную страницу сайта и проверял, есть ли ссылки с загруженной страницы в списке. Если есть, значит новость старая, если нет - тогда новость новая, и ссылку на нее добавлял в файл. И так по кругу.

    PS: Скриншот, который вы предоставили - не несет никакой смысловой нагрузки.
    Ответ написан
  • В BeautifulSoup при парсинге вместо текста выводятся какие-то параметры в {{}}. Как это исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Нажимаем F12 и внимательно изучаем запросы(особенно, xhr). После того как внимательно изучили, делаем скриптом запрос по адресу "my.avon.ru/api/specialoffersapi/getcategorypromotions?promoCategoryId=19", получаем готовый json и работаем с ним.
    5f905bd8c9526239597148.png
    Ответ написан
    Комментировать
  • Почему bs4 неверно парсит страницу?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import requests
    from bs4 import BeautifulSoup
    import json
    
    response = requests.get('https://vk.com/id1')
    
    soup = BeautifulSoup(response.text,'html.parser')
    avatar = soup.find('div',id='page_avatar').a.get('onclick')
    json_raw = avatar[avatar.find('{'):avatar.rfind('}')+1] #Здесь вытаскивает json
    json_data = json.loads(json_raw)
    print(json_data['temp']['x']) # Получаем из json url аватарки


    requests не умеет javascript.
    Ответ написан
  • Выдает ошибку при парсинге страницы, как исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Нужно либо делать проверку, либо оборачивать код в try...except:
    for item in items:
    	try:
    		d.append({
    		'title': item.find('div', class_='item-name').text,
    		'address': item.find('span', class_='item-address').text,
    		'p': item.find('div', class_='item-description').text.replace('\xa0','')
    		})
    	except:
    		pass

    На странице присутствует пустой тег li с классом item. Скорее всего в данный пустой тег встраивается рекламный блок, но так как adblock блокирует рекламу, то блок получается пустой, вот и получается исключение.
    5ede2176ede6a830455430.png
    Ответ написан
    1 комментарий
  • Python достать текст внутри тега?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    my_div = soup.find('div',class_='rating-box__active').get('style')
    	print(my_div)	# Вывод - width: 100%
    	print(my_div[7:-1])	# Вывод - 100

    Код нужно вставлять в теги, без них хабр скушал ваш пример.
    Ответ написан
    6 комментариев
  • Python+BeautifulSoup. Возможен ли поиск с помощью регулярных выражений?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Если вы передадите объект с регулярным выражением, Beautiful Soup отфильтрует результаты в соответствии с этим регулярным выражением, используя его метод search(). Следующий код находит все теги, имена которых начинаются с буквы «b»; в нашем случае это теги body и b:
    import re
    for tag in soup.find_all(re.compile("^b")):
        print(tag.name)
    # body
    # b

    Этот код находит все теги, имена которых содержат букву «t»:
    for tag in soup.find_all(re.compile("t")):
        print(tag.name)
    # html
    # title

    Виды фильтров
    Ответ написан
    Комментировать
  • Как получить данные из блока div в который записываются из JS?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    BeautifulSoup на YouTube вам не поможет(хотя можно получить страницу с помощью selenium, а дальше разбирать её с помощью BeautifulSoup - но это уже другая история)
    На страницах YouTube данных хранятся в Json. Их можно оттуда вырезать и работать с ними как с json. Можно попробовать банально искать с помощью питоновской функции find:
    (Да простят меня питонисты за данный код))
    Я не говорю что это правильно, и так нужно делать, но работает, и на том спасибо.
    import requests
    
    headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    url = 'https://www.youtube.com/watch?v=pSWOcXg703s'
    
    response = requests.get(url,headers=headers)
    html = response.text
    first_1 = html.find('og:title" content="')+19
    second_2 = html.find('">',first_1)
    title = html[first_1:second_2]
    
    first = html.find('videoViewCountRenderer')+72
    second = html.find('"}]}',first)
    views = html[first:second]
    
    first_ = html.find('likeStatus":"INDIFFERENT","tooltip"')+37
    second_ = html.find('"}},',first_)
    likes = html[first_:second_].replace(' ','').split('/')
    
    print(f'Название видео: {title}')
    print(f'Сейчас смотрят: {views}')
    print(f'Лайков: {likes[0]}')
    print(f'Дизлайков: {likes[1]}')

    На выходе:
    Название видео: Elon Musk Live: Bitcoin BTC Talk, BTC Mass Adoption &amp; SpaceX update [April, 2020]
    Сейчас смотрят: 59 365
    Лайков: 2 542
    Дизлайков: 153
    Ответ написан
    5 комментариев
  • Как обойти блокировку сайта от парсинга?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Кто вам сказал, что там стоит блокировка?
    1) Некоторые данные подгружаются по xhr.
    2) Также данные на сайте обновляются по websocket.

    websockets.readthedocs.io
    PyPI websockets 8.1
    Ответ написан
    2 комментария
  • Почему Не работает код?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Почему Не работает код?
    - потому что на первом сайте внесли косметические изменения, добавили блоки и д.т.
    Неделю назад на сайте был только один div с классом 'sppb-container-inner', а сегодня - уже 4. Но метод find находит только первый тег на странице, не зависимо от общего количества.

    В качестве временного решения можно заменить метод find методом select_one:
    # container = soup.find_all('div', class_='sppb-container-inner')
    container = soup.select_one('div.sppb-row-container:nth-child(4) > div:nth-child(1)')
    Ответ написан
    Комментировать