BeautifulSoup findAll () не находит все, независимо от того, какой парсер я использую - PullRequest
0 голосов
/ 30 октября 2018

Итак, я прочитал все вопросы о том, что findAll () не работает, и могу найти ответ, и всегда кажется, что проблема связана с конкретным html-парсером. Я запустил следующий код, используя «html.parser» по умолчанию вместе с «lxml» и «html5lib», но я могу найти только один экземпляр, когда мне нужно найти 14.

import bs4
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://robertsspaceindustries.com/pledge/ships'

uClient = uReq(my_url)

page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, features = "lxml")

containers = page_soup.findAll("ul", {"class":"ships-listing"})
len(containers)   

Я попытался опубликовать изображение HTML-кода, но у меня недостаточно репутации. Вот ссылка на изображение (https://imgur.com/a/cOLO8GO).

1 Ответ

0 голосов
/ 31 октября 2018

Когда вы загружаете страницу через urllib (или requests HTTP-библиотеку), она загружает оригинальный исходный файл HTML.

Изначально есть только тег sinlge с именем класса 'ship-list', потому что этот тег поставляется вместе с исходной страницей. Но после прокрутки страницы генерируется дополнительная <ul class='ships-listing'>, и эти элементы генерируются JavaScript.

enter image description here

Таким образом, при загрузке страницы с использованием urllib загруженный контент содержит только исходную страницу источника (вы можете увидеть ее с помощью опции просмотра источника в браузере).

...