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

Парсер на Python — как подгрузить новые посты через AJAX?

Добрый день.Работаю с сайтом, нужно подгрузить новые посты кнопкой "Загрузить ещё" в конце страницы.XHR консоль браузера показывает, что нужно пинать POST запрос по адресу.

Моя реализация -
код
r = requests.post('https://www.biz-cen.ru/load/', data={"search_params":{"metro":{"lines":{}}},
	"was_ra":",",
	"limit":200,
	"to_ra":0,
	"bc_in_fav":[],
	"office_in_fav":[],
	"bcs_in_view_start":[],
	"tolim":21,
	"num_in":3,
	"typeof_search":4,
	"show_fav":0,
	"bcs_in_view":["272",
"254",
"1737",
"2207",
"87"],
	"was_bc_loaded": 0})

Большая часть чисел выпилена в угоду компактности.


Однако сам парсер не видит новые посты - только те что были подгружены изначально.
Подскажите, где я допустил ошибку
  • Вопрос задан
  • 1015 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@AWEme
Retard Soft Inc.
У меня новые посты на каждый запрос приходят только так:
Код
import requests
from bs4 import BeautifulSoup
import json

load_url = 'https://www.biz-cen.ru/load/'

search_params = {"metro":{"lines":{}},"was_ra":",","limit":20,"to_ra":0,"tolim":20,"bc_in_fav":[],"office_in_fav":[],"bcs_in_view_start":[],"num_in":3,"typeof_search":5,"show_fav":0}
data = {'search_params':json.dumps(search_params), 'was_bc_loaded':0}

session = requests.Session()
seen = set()

def parse(response):
    soup = BeautifulSoup(response.text, 'lxml')
    table = soup.find('ul', id='bObjDataList')
    if table:
        lis = table.find_all('li')
    else:
        lis = soup.find_all('li')
    return [i.find('a').get('href') for i in lis]

while len(seen) < 200:
    response = session.post(load_url, data=data)
    for link in parse(response):
        seen.add(link)
    search_params['limit'] += 20
    data['search_params'] = json.dumps(search_params)
    print(len(seen))

Функция parse выдёргивет прямую ссылку на каждый из постов, эти ссылки там уникальные вроде.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Andrey_Dolg
Я честно думаю вы ошибаетесь в логике работы, хотя если ошибаюсь я, то буду рад это знать.
Во первых, если вы не используете эмуляцию браузера, то парсеры делают слепок страницы(1 раз).
Любые новые данные, либо вы их напрямую с того же POST запроса берете, либо запрашиваете страницу с новыми параметрами, если возможно, либо используете selenium и UI вместо запросов.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽
AST Москва
До 350 000 ₽
Wanted. Москва
До 250 000 ₽
13 янв. 2025, в 18:38
15000 руб./за проект
13 янв. 2025, в 18:27
5000 руб./за проект
13 янв. 2025, в 18:22
10000 руб./за проект