Задать вопрос
@arget1k3

Как корректно использовать селектор при парсинге сайта?

Только познакомился с парсингом. Просмотрел видеоурок и реализовал такой код:
import requests
from bs4 import BeautifulSoup as BS

r = requests.get('https://www.igromania.ru/games/')
html = BS(r.content, 'html.parser')


for el in html.select('.CommonBasePage_page__mlC3i > .CommonBasePage_page_content__o0c0C'): #.d-flex app main-chat > .main dialog custom-scrollbar > .chat-request flex-row-reverse gap-10 > .chat-infor align-flex-start > 
    title = el.select('.GameCard_content__5G7vA > a')
    for i in title:
        print(i.text)


Теперь мне надо реализовать что-то похожее для другого сайта ссылка на сайт

Вот что я написал:
import requests
from bs4 import BeautifulSoup as BS


r = requests.get('https://talkai.info/ru/chat/')
html = BS(r.content, 'html.parser')


for el in html.select('.sectionChat > .sectionChatDialogue'): #.d-flex app main-chat > .main dialog custom-scrollbar > .chat-request flex-row-reverse gap-10 > .chat-infor align-flex-start > 
    title = el.select('.messageContain copy-text')
    for i in title:
        print(i.text)


Проблема в том, что не заходит программа в цикл и как я понял проблема с селектором.
Может кто подсказать как правильно использовать селекторы?

Вот фото кода сайта
6515acf439cc9944653120.jpeg
  • Вопрос задан
  • 196 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ну если не ограничивать себя видеоуроками, а узнать, как именно работает Web, то можно догадаться до первого шага по отладке такой ситуации:
Сохрани ответ сайта в файл и посмотри, что тебе пришло на самом деле.

Во-первых, сайт может отдавать разные страницы боту и браузеру, особенно если запросы от них не идентичны. Более того, владелец сайта нередко заинтересован в том, чтобы обнаруживать ботов и слать им не запрашиваемую страницу, а что-то другое - чтоб неповадно парсить было.

Во-вторых, современные сайты - это не статические странички аля 1991й год. Они зачастую битком набиты JS-скриптами, которые исполняются в среде браузера. Поэтому нередко сайт отдаёт страницу-заглушку, на которую средствами скрипта уже подгружается контент. BeautifulSoup не исполняет JS, это не его задача, а потому ты увидишь только заглушку, и больше ничего.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AshBlade
@AshBlade
Просто хочу быть счастливым
Вместо .messageContain copy-text напиши .messageContain .copy-text (точка у copy-text).

Если есть несколько классов, то все они должны писаться через точку - точка означает css класс. Без точки - html тэг
Ответ написан
Комментировать
SoreMix
@SoreMix
yellow
1. el.select('.messageContain.copy-text')
2. А авторизация и некий антиспам продуманы уже я надеюсь? requests понятия не имеет что за диалог у вас идет в браузере. Не факт что вообще вернется страница в таком виде в каком должна быть, вдруг диалоги XHR подгружаются

Плюс, важная вещь - научиться смотреть что пришло в ответ на запрос. То что в браузере - пусть будет в браузере, это не ваша страница, ваша - содержимое r.content. Берем это содержимое, льем в файл и изучаем
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы