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

  #1  
Старый 17.09.2024, 17:01
dan|0
Новичок
Регистрация: 07.06.2018
Сообщений: 9
С нами: 4175722

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

Доброго времени суток читающие, начал потихоньку изучать пайтон и столкнулся с такой проблемой:

Не получается спарсить данные с сайта, а именно текст находящийся в заголовке

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
(
"Элемент не найден"
)


Прошу помогите разобраться, или может быть я что-то не так делаю
 
Ответить с цитированием

  #2  
Старый 18.09.2024, 19:53
Макаров
Новичок
Регистрация: 27.06.2024
Сообщений: 22
С нами: 991773

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

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

  #3  
Старый 29.09.2024, 12:09
FixZer
Участник форума
Регистрация: 15.07.2021
Сообщений: 142
С нами: 2543284

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

Цитата:
Сообщение от dan|0  

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

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
(
)
# Закрываем браузер
 
Ответить с цитированием

  #4  
Старый 07.10.2024, 18:18
dan|0
Новичок
Регистрация: 07.06.2018
Сообщений: 9
С нами: 4175722

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

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

Доброе утро, так как загрузка сайта осуществляется через 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 бота.
 
Ответить с цитированием

  #5  
Старый 08.10.2024, 19:34
FixZer
Участник форума
Регистрация: 15.07.2021
Сообщений: 142
С нами: 2543284

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

Цитата:
Сообщение от dan|0  

Спасибо вам, теперь останется только почитать/посмотреть как работает "Selenium", и можно ли будет это как-то этот код перенести в tg бота.
Можно )
 
Ответить с цитированием

  #6  
Старый 08.10.2024, 19:45
neverlane
Познавший АНТИЧАТ
Регистрация: 01.11.2018
Сообщений: 1,010
С нами: 3964085

Репутация: 183


По умолчанию

можно и не юзать селениум а просто выдрать регулярками отсюда





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





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


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




ANTICHAT ™ © 2001- Antichat Kft.