HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 13.04.2024, 08:41
nelit.dev
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами: 1158033

Репутация: 18
По умолчанию

получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?
 
Ответить с цитированием

  #12  
Старый 13.04.2024, 11:53
вареник с мясом?
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами: 1229791

Репутация: 1
По умолчанию

Цитата:
Сообщение от nelit.dev  

получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?
За меня - нет. Помогли с проблемой.

Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает
 
Ответить с цитированием

  #13  
Старый 13.04.2024, 13:55
TastyBread123
Постоянный
Регистрация: 05.11.2021
Сообщений: 634
С нами: 2380746

Репутация: 68


По умолчанию

Цитата:
Сообщение от вареник с мясом?  

За меня - нет. Помогли с проблемой.

Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает
Зачем так делать, просто используй что-то на подобии youtube-dl и его форков
 
Ответить с цитированием

  #14  
Старый 13.04.2024, 14:45
вареник с мясом?
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами: 1229791

Репутация: 1
По умолчанию

Цитата:
Сообщение от TastyBread123  

Зачем так делать, просто используй что-то на подобии youtube-dl и его форков
Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.
 
Ответить с цитированием

  #15  
Старый 13.04.2024, 15:34
nelit.dev
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами: 1158033

Репутация: 18
По умолчанию

Цитата:
Сообщение от вареник с мясом?  

Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.
жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.
 
Ответить с цитированием

  #16  
Старый 14.04.2024, 15:39
вареник с мясом?
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами: 1229791

Репутация: 1
По умолчанию

Цитата:
Сообщение от nelit.dev  

жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.
Цитата:

import asyncio
from aiogram import Bot, types
from aiogram import Dispatcher
from aiogram.types import CallbackQuery
from aiogram.utils import executor
import aiohttp
from bs4 import BeautifulSoup

# Токен вашего бота
TOKEN = 'ТОКЕН
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

# Функция для парсинга информации о видео с канала
async def parse_channel(channel_url):
async with aiohttp.ClientSession() as session:
async with session.get(channel_url) as response:
html = await response.text()
soup = BeautifulSoup(html, 'html.parser')
videos = []
# Находим все сообщения в канале
for post in soup.find_all('div', class_='style-scope ytd-rich-grid-media'):
# Находим текст сообщения (название видео)
text = post.find('a', class_='yt-simple-endpoint style-scope ytd-rich-grid-video-renderer').text.strip()
# Находим дату публикации
date = post.find('span', class_='style-scope ytd-video-meta-block').text.strip()
# Находим количество просмотров
views = post.find('span', class_='style-scope ytd-video-meta-block').text.strip()
# Сохраняем информацию о видео
video_info = {'text': text, 'date': date, 'views': views}
print("Parsed video:", video_info) # Отладочное сообщение
videos.append(video_info)
return videos

# Обработчик команды /start
@dp.message_handler(commands=['start'])
async def start_message(message: types.Message):
await message.answer("Привет! Пожалуйста, отправь мне ссылку на канал, чтобы получить видео.")

# Обработчик текстовых сообщений (получаем ссылку на канал и отправляем видео)
@dp.message_handler(content_types=['text'])
async def get_channel_videos(message: types.Message):
channel_url = message.text
try:
videos = await parse_channel(channel_url)
print("Received videos:", videos) # Добавим отладочное сообщение
# Создаем inline клавиатуру с кнопками для каждого видео
keyboard = types.InlineKeyboardMarkup()
for video in videos:
# Добавляем кнопку для каждого видео
keyboard.add(types.InlineKeyboardButton(text=video['text'], callback_data=video['text']))
await message.answer("Выбери видео:", reply_markup=keyboard)
except Exception as e:
await message.answer(f"Произошла ошибка: {str(e)}")

# Обработчик нажатий на inline кнопки
@dp.callback_query_handler()
async def callback_query(call: CallbackQuery):
try:
videos = await parse_channel(call.message.text)
for video in videos:
# Проверяем, на какую кнопку нажал пользователь
if call.data == video['text']:
# Отправляем изображение, название, дату и количество просмотров
await bot.send_photo(call.message.chat.id, photo=video['image'], caption=f"{video['text']}\nДата: {video['date']}\nПросмотры: {video['views']}")
break
except Exception as e:
await call.message.answer(f"Произошла ошибка: {str(e)}")

# Запускаем бота
if name == 'main':
executor.start_polling(dp)
 
Ответить с цитированием

  #17  
Старый 14.04.2024, 15:53
nelit.dev
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами: 1158033

Репутация: 18
По умолчанию

скинь код как код на форуме, а не цитата
 
Ответить с цитированием

  #18  
Старый 14.04.2024, 18:08
вареник с мясом?
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами: 1229791

Репутация: 1
По умолчанию

Цитата:
Сообщение от nelit.dev  

скинь код как код на форуме, а не цитата
Как просто текст?

А что не так сейчас?
 
Ответить с цитированием

  #19  
Старый 15.04.2024, 12:32
nelit.dev
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами: 1158033

Репутация: 18
По умолчанию

Цитата:
Сообщение от вареник с мясом?  

Как просто текст?
А что не так сейчас?
табуляции

 
Ответить с цитированием

  #20  
Старый 15.04.2024, 23:35
вареник с мясом?
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами: 1229791

Репутация: 1
По умолчанию

Цитата:
Сообщение от nelit.dev  

табуляции
Python:





Код:
import
asyncio
from
aiogram
import
Bot
,
types
from
aiogram
import
Dispatcher
from
aiogram
.
types
import
CallbackQuery
from
aiogram
.
utils
import
executor
import
aiohttp
from
bs4
import
BeautifulSoup
# Токен вашего бота
TOKEN
=
'ТОКЕН
bot
=
Bot
(
token
=
TOKEN
)
dp
=
Dispatcher
(
bot
)
# Функция для парсинга информации о видео с канала
async
def
parse_channel
(
channel_url
)
:
async
with
aiohttp
.
ClientSession
(
)
as
session
:
async
with
session
.
get
(
channel_url
)
as
response
:
html
=
await
response
.
text
(
)
soup
=
BeautifulSoup
(
html
,
'html.parser'
)
videos
=
[
]
# Находим все сообщения в канале
for
post
in
soup
.
find_all
(
'div'
,
class_
=
'style-scope ytd-rich-grid-media'
)
:
# Находим текст сообщения (название видео)
text
=
post
.
find
(
'a'
,
class_
=
'yt-simple-endpoint style-scope ytd-rich-grid-video-renderer'
)
.
text
.
strip
(
)
# Находим дату публикации
date
=
post
.
find
(
'span'
,
class_
=
'style-scope ytd-video-meta-block'
)
.
text
.
strip
(
)
# Находим количество просмотров
views
=
post
.
find
(
'span'
,
class_
=
'style-scope ytd-video-meta-block'
)
.
text
.
strip
(
)
# Сохраняем информацию о видео
video_info
=
{
'text'
:
text
,
'date'
:
date
,
'views'
:
views
}
print
(
"Parsed video:"
,
video_info
)
# Отладочное сообщение
videos
.
append
(
video_info
)
return
videos
# Обработчик команды /start
@dp.message_handler
(
commands
=
[
'start'
]
)
async
def
start_message
(
message
:
types
.
Message
)
:
await
message
.
answer
(
"Привет! Пожалуйста, отправь мне ссылку на канал, чтобы получить видео."
)
# Обработчик текстовых сообщений (получаем ссылку на канал и отправляем видео)
@dp.message_handler
(
content_types
=
[
'text'
]
)
async
def
get_channel_videos
(
message
:
types
.
Message
)
:
channel_url
=
message
.
text
try
:
videos
=
await
parse_channel
(
channel_url
)
print
(
"Received videos:"
,
videos
)
# Добавим отладочное сообщение
# Создаем inline клавиатуру с кнопками для каждого видео
keyboard
=
types
.
InlineKeyboardMarkup
(
)
for
video
in
videos
:
# Добавляем кнопку для каждого видео
keyboard
.
add
(
types
.
InlineKeyboardButton
(
text
=
video
[
'text'
]
,
callback_data
=
video
[
'text'
]
)
)
await
message
.
answer
(
"Выбери видео:"
,
reply_markup
=
keyboard
)
except
Exception
as
e
:
await
message
.
answer
(
f"Произошла ошибка:{str(e)}"
)
# Обработчик нажатий на inline кнопки
@dp.callback_query_handler
(
)
async
def
callback_query
(
call
:
CallbackQuery
)
:
try
:
videos
=
await
parse_channel
(
call
.
message
.
text
)
for
video
in
videos
:
# Проверяем, на какую кнопку нажал пользователь
if
call
.
data
==
video
[
'text'
]
:
# Отправляем изображение, название, дату и количество просмотров
await
bot
.
send_photo
(
call
.
message
.
chat
.
id
,
photo
=
video
[
'image'
]
,
caption
=
f"{video['text']}\nДата:{video['date']}\nПросмотры:{video['views']}"
)
break
except
Exception
as
e
:
await
call
.
message
.
answer
(
f"Произошла ошибка:{str(e)}"
)
# Запускаем бота
if
name
==
'main'
:
executor
.
start_polling
(
dp
)
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...
×

ESCROW ADMIN PANEL

Загрузка...
Загрузка...