@matik135

Как нажать кнопку на сайте, парсинг?

Пишу телеграмм бота который сможет скидывать пачки анекдотов сгенерированных нейросетью на сайте "https://randstuff.ru/joke/". Одну шутку достать с сайта получается легко. Но мне бы хотелось достать 10 анекдотов для использования в коде. На сайте есть кнопка "Сгенерировать", при нажатии на которую текст анекдота меняется. Подскажите пожалуйста, как мне автоматически нажимать эту кнопку?
Код:
import requests
from bs4 import BeautifulSoup as b
URL = 'https://randstuff.ru/joke/fav/'
r = requests.get(URL)
soup = b(r.text, 'html.parser')
anekdots = []
for i in range(10):
anekdot = soup.find_all('td')
anekdots.append(anekdot)
#здесь я и хочу добавить нажатие на кнопку "сгенерировать"

PS: я в таких делах ещё совсем совсем новичок, поэтому извините если это глупый вопрос. Заранее спасибо!
  • Вопрос задан
  • 281 просмотр
Пригласить эксперта
Ответы на вопрос 3
@alekssamos
Программист любитель
import requests
s=requests.session()
s.headers={"X-Requested-With": "XMLHttpRequest"}
joke_text = s.post("https://randstuff.ru/joke/generate/").json()["joke"]["text"]
print(joke_text)
Ответ написан
Комментировать
@66demon666
По навыкам джун - по факту безработный
Через инструменты разработчика смотрите какой запрос отсылается на сервер и повторяйте
Там обычный POST на этот же адрес и внятный ответ в JSON
Ответ написан
Комментировать
@d-sem
На сайте нет никакого антипарсинга, т. е. нет смысла заморачиваться с нажатием кнопки.
Просто сделайте с заголовком 'X-Requested-With': 'XMLHttpRequest

import http.client

conn = http.client.HTTPSConnection("randstuff.ru")
payload = ''
headers = {
  'X-Requested-With': 'XMLHttpRequest'
}
conn.request("POST", "/joke/generate/", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект