import requests
from bs4 import BeautifulSoup
import json
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
}
def get_news_info(card):
"""
Функция для получения информации об одной новости
"""
# Получаем заголовки новости
article_title = card.find("a").text.strip()
# Получаем описание новости
article_desc = card.find("p").text.strip()
# Получаем url новости
article_url = f'https://www.irk.ru{card.find("a").get("href")}'
# Получаем время новости
article_date_time = card.find("time").get("datetime")
id = article_date_time.replace(' ', '').replace('-', '').replace(':', '')
news = {
"article_date_timestamp": article_date_time,
"article_title": article_title,
"article_url": article_url,
"article_desc": article_desc
}
return (id, news)
def get_site_news(file_news_dict, articles_cards):
"""
Функция для добавления новых новостей в словарь,
возвращает словари со всеми новостями и с новыми новостями
"""
new_news_dict = dict()
for article in articles_cards:
id, news = get_news_info(article)
if id not in file_news_dict.keys():
file_news_dict[id] = news
new_news_dict[id] = news
return (file_news_dict, new_news_dict)
def main():
url = "https://www.irk.ru/news/"
r = requests.get(url=url, headers=headers)
soup = BeautifulSoup(r.text, "lxml")
articles_cards = soup.find_all("li", class_="b-news-article-list-item")
# Открываем файл с новостями
with open("src/test_dict.json", "r+") as news_file:
# Получаем словарь новостей из файла
try:
file_news_dict = json.load(news_file)
except:
# Если в файле не словарь, создаем пустой словарь
file_news_dict = dict()
# Обновляем новости
file_news_dict, new_news_dict = get_site_news(file_news_dict, articles_cards)
# Сохраняем новости
json.dump(file_news_dict, news_file, indent=4, ensure_ascii=False)
print(new_news_dict)
if __name__ == '__main__':
main()
import telebot
# import configure
from telebot import types
bot = telebot.TeleBot(token)
@bot.message_handler(commands=['get_info', 'info'])
def get_user_id(message):
markup_inline = types.InlineKeyboardMarkup()
but_yes = types.InlineKeyboardButton(text='Да', callback_data='yes')
but_no = types.InlineKeyboardButton(text='Нет', callback_data='no')
markup_inline.add(but_yes, but_no)
bot.send_message(message.chat.id, 'Желаете узнать небольшую информацию о вас', reply_markup=markup_inline)
@bot.callback_query_handler(func = lambda call: True)
def answer(call):
if call.data == 'yes':
markup_reply = types.ReplyKeyboardMarkup(resize_keyboard=True)
but_ID = types.KeyboardButton('МОЙ ID')
but_username = types.KeyboardButton('МОЙ НИК')
markup_reply.add(but_ID, but_username)
bot.send_message(call.message.chat.id, 'Нажмите на одну из кнопок', reply_markup=markup_reply)
elif call.data == 'no':
pass
@bot.message_handler(content_types=['text'])
def get_text(message):
if message.text.lower() == 'привет':
bot.send_message(message.chat.id, 'Привет, неизвестный юзер!')
elif message.text.lower() == 'как дела?':
bot.send_message(message.chat.id, 'Все хорошо, как у тебя?')
@bot.message_handler(content_types=['text'])
def get_text(message):
if message.text() == 'МОЙ ID':
bot.send_message(message.chat.id, f'Your ID: {message.from_user.id}')
elif message.text() == 'МОЙ НИК':
bot.send_message(message.chat.id, f'Your ID: {message.from_user.first_name}, {message.from_user.last_name}')
bot.polling()
@dp.callback_query_handler(text="Normal") # text сопоставляется с callback_data
async def send_random_value(call: types.CallbackQuery):
# Тут ваш код добавляющий Normal в бд
await call.answer() # Нужно чтобы на кнопке не было иконки часов
await call.message.delete_reply_markup() # Убирает клавиатуру
<form action="https://dobro.ru/login?d=1" method="post">
<input type="hidden" name="_csrf_token" value="avtoskx3IEw4OpCPeHN5g94SceriuwMB4AgyeLLR9h8"/>
<div class="row mb-3 mb-md-4">
<div class="col-12">
<div class="form__group">
<input type="email" value="" name="email"
placeholder=" " required class="form__input form__input_text"/>
<span class="form__input_label">Электронная почта</span>
</div>
</div>
</div>
<div class="row mb-3">
<div class="col-12">
<div class="form__group">
<input type="password" name="password"
placeholder=" " required class="form__input form__input_text"/>
<span class="form__input_label">Пароль</span>
</div>
</div>
</div>
<div class="row mb-3 mb-md-5">
<div class="col-6 text-left">
<div class="custom-control custom-checkbox">
<input type="checkbox" name="_remember_me" id="_remember_me"
class="form__input_checkbox custom-control-input"/>
<label class="custom-control-label required"
for="_remember_me">
Запомнить меня
</label>
</div>
</div>
<div class="col-6 text-right">
<a href="/password/reset/request">Забыли пароль?</a>
</div>
</div>
<div class="row mb-3">
<div class="col-12">
<button type="submit" class="button button--pink button--height-48 js-login-form-submit"
style="border-radius: 4px;">Войти
</button>
</div>
</div>
<div class="row mb-4 mb-md-5">
<div class="col-12 text-center">
<p class="d-inline-block ml-4">Нет аккаунта? </p>
<a
href="/register"
onclick="ym(58966471,'reachGoal','clickregister')" >Зарегистрируйтесь</a>
</div>
</div>
</form>
<input type="password" name="password"
def get_data(html, link):
"""
Поиск формы с указанной ссылкой post
"""
# Если html просто текст, превращаем его в объект BeautifulSoup
if str(type(html)) != "<class 'bs4.BeautifulSoup'>":
html = bs(html, 'lxml')
# Собираем и возвращаем словарь
return dict((i.get('name'), i.get('value')) for i in html.find('form', action=link).find_all('input'))
html = r.get("https://dobro.ru/login?d=1", headers=headers)
data = get_data(html. "https://dobro.ru/login?d=1")
# Второй параметр это ссылка указанная тут: <form action="https://dobro.ru/login?d=1" method="post">
data['login'] = login
data['password'] = password
# Ваши логин и пароль
r = s.post('https://dobro.ru/login?d=1', data = data, headers = {'User-Agent' : ua})