bs4 получает только первые 15 значений - PullRequest
0 голосов
/ 28 января 2019

Привет, я новичок в Bs4. Мне нужно получить весь продукт с сайта. Я пытался получить значения, но он показывает только первые 15 из 100 товаров на странице.

from bs4 import BeautifulSoup
import requests
base_url = 'http://www.elkay.com/sinks/undermount#q=|100|0|1|'
response = requests.get(base_url)
soup = BeautifulSoup(response.content.decode('utf-8'), "html.parser")

is_row = soup.findAll('div', attrs={'class': 'product result_detail'})
print(is_row)

Может ли кто-нибудь помочь?я?

здесь is_row - это ResultSet с len-15 на самом деле их 100 продуктов

Любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 28 января 2019

Если вы проверите этот URL с помощью не очень быстрого соединения (например, у меня: D), вы увидите, что он загружает только 15 элементов, ПОСЛЕ того, как он полностью загружен, он отправляет ДРУГОЙ запрос на загрузку остальных элементов.,Вот почему вы получаете только первые 15 элементов, используя ваш код (вы получаете ответ только на первый запрос)

Используя Chrome Developer Tools (нажмите F12), вы легко можете найти нужный запрос:

  1. Открыть сайт
  2. Открыть инструменты разработчика (F12)
  3. Нажмите на вкладку Сеть
  4. Теперь выберите Результаты на странице: 100
  5. Вы должны увидеть новый запрос под названием CategoryNavigationResultsView
  6. Скопировать команду curl (Копировать как cURL (bash))

Copy curl command

Используйте этот очень удобный сайт для преобразования запроса curl в запросы Python

Я не буду копировать полный запрос, но у него есть параметр данных:

data = {
    'contentBeginIndex': '0^',
    'productBeginIndex': '0^',
    'showPageSize': '100^',
}

Отправив запрос таким образом, вы получите 100 единиц товара.Вы также можете получить следующие страницы, изменив ... BeginIndex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...