BeautifulSoup не возвращает все элементы, которые должны - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь импортировать все предложения со следующего сайта с BeautifulSoup.

from bs4 import BeautifulSoup as soup 
from urllib.request import urlopen as uReq
import requests
my_url='https://www.promobit.com.br/promocoes/playstation-4/s/'
uclient=uReq(my_url)
page_html=uclient.read()
uclient.close()
page_soup=soup(page_html, "html.parser")
containers=page_soup.findAll("div",{"class":"in-size"})

Однако, когда я проверяю длину своего списка, вместо получения значения 96, как я и ожидал, вместо этого возвращается 3.

print(len(containers))
>>> 3

Для некоторых причина, когда я печатаю текст в «контейнерах», я получаю данные из некоторых предложений, помеченных как «de graca».

Я пробовал использовать разные парсеры, однако результат остается неправильным.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Итак, вы допустили ошибку в селекторе, который вы использовали для поиска элементов. Если вы нажмете Ctrl + F на вкладках элементов после проверки элемента на этой странице, вы обнаружите, что есть только 3 узла с классом «in-size». Следовательно, длина 3.

Я изменил ваш бит кода с помощью правильных селекторов. Что я делаю, так это нахожу контейнер с идентификатором «предложения», который является родительским контейнером для всех предложений. И если вы посмотрите на структуру html, вы заметите, что все карты на ser имеют класс «pr-tl-card».

from bs4 import BeautifulSoup as soup 
from urllib.request import urlopen as uReq
import requests
my_url='https://www.promobit.com.br/promocoes/playstation-4/s/'
uclient=uReq(my_url)
page_html=uclient.read()
uclient.close()
page_soup=soup(page_html, "html.parser")
offers=page_soup.select("#offers div.pr-tl-card")
len(offer_container)
0 голосов
/ 09 апреля 2020

Не понятно, что вы пытаетесь получить. Вы имели в виду это вместо этого?

containers=page_soup.findAll("div",{"class":"pr-tl-card"})

Возвращает 96 элементов страницы.

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