Парсинг с веб-страницы

dan|0

Известный
Автор темы
9
0
Доброго времени суток читающие, начал потихоньку изучать пайтон и столкнулся с такой проблемой:
Не получается спарсить данные с сайта, а именно текст находящийся в заголовке <h4>

Python:
import requests
from bs4 import BeautifulSoup as b
import re

URL = 'https://stalcraft-status.ru/'
r = requests.get(URL)
soup = b(r.text, 'html.parser')

# Ищем элемент, который содержит классы 'md:hidden text-2xl' или 'hidden md:block text-2xl'
vibros = soup.find('h4', class_=re.compile(r'(md:hidden|hidden md:block) text-2xl'))

# Выводим результат
if vibros:
    text = vibros.get_text()
    print(text)
else:
    print("Элемент не найден")
Прошу помогите разобраться, или может быть я что-то не так делаю
 

Макаров

Новичок
21
4
Загрузка данного блока страницы происходит javascript`ом с использованием ajax, и повлиять на его работу только лишь запросом не получится. Нужно либо использовать selenium, либо использовать встроенное оповещение(stalcraft).
 

FixZer

Активный
130
38
Доброго времени суток читающие, начал потихоньку изучать пайтон и столкнулся с такой проблемой:
Не получается спарсить данные с сайта, а именно текст находящийся в заголовке <h4>

Python:
import requests
from bs4 import BeautifulSoup as b
import re

URL = 'https://stalcraft-status.ru/'
r = requests.get(URL)
soup = b(r.text, 'html.parser')

# Ищем элемент, который содержит классы 'md:hidden text-2xl' или 'hidden md:block text-2xl'
vibros = soup.find('h4', class_=re.compile(r'(md:hidden|hidden md:block) text-2xl'))

# Выводим результат
if vibros:
    text = vibros.get_text()
    print(text)
else:
    print("Элемент не найден")
Прошу помогите разобраться, или может быть я что-то не так делаю
Доброе утро, так как загрузка сайта осуществляется через JavaScript разумнее всего использовать библиотеку Selenium.
Вот пример кода:


Пример кода:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.options import Options as EdgeOptions

# Настройки
options = EdgeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])

# Инициализация драйвера
driver = webdriver.Edge(options=options)

# Открываем сайт
driver.get('https://stalcraft-status.ru/')

# Ждем, пока элемент не станет доступен
try:
    element = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div/section[2]/div/section[3]/div[1]/h4[2]"))
    ) # С помощью этого элемента проверяем, загружена ли полностью страница или нет, так как /html/body/div/section[2]/div/section[3]/div[1]/h4[2] отвечает за текст "Последний выброс был 2 часа назад", а он в свою очередь загружается через JavaScript
    print("Страница полностью загружена")
except Exception as e:
    print(e)

with open('html.html', 'w', errors='ignore', encoding='utf-8') as file:
    file.write(driver.page_source) # здесь сохраняем файл с исходным кодом сайта, чтобы удобно было работать, так как html сильно отличается от оригинальной страницы

# Найдем элемент с нужным XPATH
vibros = driver.find_element(By.XPATH, "/html/body/div[1]/section[2]/div/section[4]/div[1]/h4 | /html/body/div/section[2]/div/section[3]/div[1]/h4[2]")

# Выведем текст элемента
if vibros:
    text = vibros.text
    print(text)
else:
    print("Элемент не найден")

driver.quit() # Закрываем браузер
 
Последнее редактирование:
  • Нравится
Реакции: dan|0

dan|0

Известный
Автор темы
9
0
Доброе утро, так как загрузка сайта осуществляется через JavaScript разумнее всего использовать библиотеку Selenium.
Вот пример кода:


Пример кода:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.edge.options import Options as EdgeOptions

# Настройки
options = EdgeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])

# Инициализация драйвера
driver = webdriver.Edge(options=options)

# Открываем сайт
driver.get('https://stalcraft-status.ru/')

# Ждем, пока элемент не станет доступен
try:
    element = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div/section[2]/div/section[3]/div[1]/h4[2]"))
    ) # С помощью этого элемента проверяем, загружена ли полностью страница или нет, так как /html/body/div/section[2]/div/section[3]/div[1]/h4[2] отвечает за текст "Последний выброс был 2 часа назад", а он в свою очередь загружается через JavaScript
    print("Страница полностью загружена")
except Exception as e:
    print(e)

with open('html.html', 'w', errors='ignore', encoding='utf-8') as file:
    file.write(driver.page_source) # здесь сохраняем файл с исходным кодом сайта, чтобы удобно было работать, так как html сильно отличается от оригинальной страницы

# Найдем элемент с нужным XPATH
vibros = driver.find_element(By.XPATH, "/html/body/div[1]/section[2]/div/section[4]/div[1]/h4 | /html/body/div/section[2]/div/section[3]/div[1]/h4[2]")

# Выведем текст элемента
if vibros:
    text = vibros.text
    print(text)
else:
    print("Элемент не найден")

driver.quit() # Закрываем браузер
Спасибо вам, теперь останется только почитать/посмотреть как работает "Selenium", и можно ли будет это как-то этот код перенести в tg бота.
 

neverlane

t.me/neverlane00
Друг
1,010
1,161
можно и не юзать селениум а просто выдрать регулярками отсюда
1728402331197.png