requests.get Часть HTML кода теряется

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
Win 7
Python 3
requests 2.23.0
Цель - спарсить ссылки объявлений на буржуйской доске объявлений, для дальнейшего парсинга уже самих объявлений.

Python:
#Импортируем библиотеки
from bs4 import BeautifulSoup
import requests

#Глобальные переменные
url = list()
headers = {'User-Agent': 'Magik Browser'}

#Цикл перебора страниц
for page in range(1,2):
    page = str(page)
    
    #Запрос ссылки
    reg = requests.get('https://www.bazaraki.com/real-estate/?type_view=card&page=' + page , headers = headers)
    print(reg.text)
    #Вот здесь выводится неполный хтмл код
    
    #Получаем список тегов
    soup = BeautifulSoup(reg.text, 'lxml')
    nedvig = soup.find_all('a', class_ = 'mask')
    
    #Добавляем все теги в список url
    for s in nedvig:
       url.append(s.get('href'))

#Выводим количество ссылок в списке
print(len(url))

Я просмотрел что выводит print(reg.text) и выяснилось что часть хтмл кода я не получаю. Причем в этой части находятся 6 первых объявлений и все 6 Топ объявления, которые меняются при каждом обновлении этой страницы. Почему я не могу их спарсить? И как это возможно обойти?
 

lightmanLP

Новичок
Пользователь
Май 23, 2020
18
1
3
Возможно проблема в том, что данные требуют прогрузки сайта и выполнения скриптов. Для этого есть тот же Selenium или Pyppeteer.
 

ilyuhich

Новичок
Пользователь
Апр 21, 2020
1
0
1
Столкнулся с подобной же проблемой.
Как я понял, requests не может выполнить все скрипты и в этом случае нужно применять что-то вида selenium
 

lightmanLP

Новичок
Пользователь
Май 23, 2020
18
1
3
Как я понял, requests не может выполнить все скрипты и в этом случае нужно применять что-то вида selenium
О чем я и сказал.
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Win 7
Python 3
requests 2.23.0
Цель - спарсить ссылки объявлений на буржуйской доске объявлений, для дальнейшего парсинга уже самих объявлений.

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

lightmanLP

Новичок
Пользователь
Май 23, 2020
18
1
3
Просто может данные не успевают дойти. Попробуй сделать с начало без цикла. Если работае без цикла занчит надо поставить таймер с задержкой.
Что значит не успевают? Это не так работает.
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Что значит не успевают? Это не так работает.
Так у тебя и не работает:) Просто попробуй без цикла и посмотри как получится.
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Так у тебя и не работает:) Просто попробуй без цикла и посмотри как получится.
Цикл здесь роли не играет. Топ объявления не получается спарсить потому что их нет в html-коде страницы на момент запроса, они добавляются позже через js. Спарсить их можно либо с помощью selenium`a, либо разобраться откуда подгружаются топ объявления на сайте и парсить уже с того урла.
 

MaksimD

Пользователь
Пользователь
Май 12, 2020
51
11
8
Цикл здесь роли не играет. Топ объявления не получается спарсить потому что их нет в html-коде страницы на момент запроса, они добавляются позже через js. Спарсить их можно либо с помощью selenium`a, либо разобраться откуда подгружаются топ объявления на сайте и парсить уже с того урла.
Ну может я чего не понимаю, тогда можешь объяснить почему он парсит ссылку class="mask" хоты топ 6 находиться по ссылки с другим классом <a class="card__title-link "
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Ну может я чего не понимаю, тогда можешь объяснить почему он парсит ссылку class="mask" хоты топ 6 находиться по ссылки с другим классом <a class="card__title-link "
У топ 6 ссылки тоже находятся внутри элемента с классом "mask". Просто сам div с топ 6 в html пустой, он подгружается через ajax, в файле https://www.bazaraki.com/static/js/bundles/category_js.bf3d8286f086.js в функции _loadTop().
 

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
У топ 6 ссылки тоже находятся внутри элемента с классом "mask". Просто сам div с топ 6 в html пустой, он подгружается через ajax, в файле https://www.bazaraki.com/static/js/bundles/category_js.bf3d8286f086.js в функции _loadTop().
Хорошо, смысл я понял. А есть какая то возможность вытянуть урл с топ 6 из ява скрипта? Просто я так понимаю что топ 6 берутся рандомно из какого то контейнера, так как при обновлении страницы они меняются. Поэтому даже если я использую selenium, стопроцентно будут повторы за 500 циклов. Но проблема не в повторах их можно выкинуть сделав из списка множество, а потом обратно перегнать в список. Просто не факт что я получу все ссылки.
 

lightmanLP

Новичок
Пользователь
Май 23, 2020
18
1
3
Просто я так понимаю что топ 6 берутся рандомно из какого то контейнера, так как при обновлении страницы они меняются. Поэтому даже если я использую selenium, стопроцентно будут повторы за 500 циклов.
Зачем тогда вообще брать топ?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Хорошо, смысл я понял. А есть какая то возможность вытянуть урл с топ 6 из ява скрипта? Просто я так понимаю что топ 6 берутся рандомно из какого то контейнера, так как при обновлении страницы они меняются. Поэтому даже если я использую selenium, стопроцентно будут повторы за 500 циклов. Но проблема не в повторах их можно выкинуть сделав из списка множество, а потом обратно перегнать в список. Просто не факт что я получу все ссылки.
Если нужно собрать с сайта всю информацию без повторов лучше наверно парсить api. У данного сайта есть частично открытое api, вот ссылка и примеры (дальше думаю разберетесь):
Python:
'https://www.bazaraki.com/api/items/' # основной endpoint
'https://www.bazaraki.com/api/items/2754666/' # данные конкретного объявления
'https://www.bazaraki.com/api/items/?page=3&rubric=678' # страницы и рубрики
 

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
И последний вопрос каким образом получены эти ссылки?
'https://www.bazaraki.com/api/items/' # основной endpoint '
https://www.bazaraki.com/api/items/2754666/' # данные конкретного объявления '
https://www.bazaraki.com/api/items/?page=3&rubric=678' # страницы и рубрики
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
И последний вопрос каким образом получены эти ссылки?
Анализ кода страниц на сайте и эксперименты.
 

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
Что мне нужно почитать, или посмотреть чтобы я так же мог Анализировать код и ставить эксперименты? :)
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Что мне нужно почитать, или посмотреть чтобы я так же мог Анализировать код и ставить эксперименты? :)
Можете посмотреть вот этот курс: Практический курс парсинга сайтов на Python. А вообще нужно просто больше практики.
 

Dominus

Новичок
Пользователь
Май 23, 2020
20
1
3
Большое спасибо за помощь!
 

Форум IT Специалистов