Почему очищенный HTML отличается от элемента, проверенного браузером?

В настоящее время я работаю над проектом парсинга веб-страниц и столкнулся с проблемой при парсинге данных из https://foundersfund.com/portfolio. Мне удалось успешно получить все ссылки на страницы каждой компании. Однако, протестировав некоторые из этих ссылок, я заметил, что выходной HTML-код отличается от того, что отображается в инструменте проверки элементов. В результате я не могу получить никакой информации.

import requests
from bs4 import BeautifulSoup

headers = { 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    }

response = requests.get("https://foundersfund.com/company/figma/", headers=headers)

soup = BeautifulSoup(response.content, "lxml")

soup

Вывод возвращает это:

Google Colab

Я ожидал получить информацию о Figma, но вместо этого получил информацию о SpaceX. Интересно, что при попытке просмотреть страницы других компаний, например https://foundersfund.com/company/spotify/ или https://foundersfund.com/company/airbnb/, я столкнулся с той же проблемой. вместо этого появилась SpaceX. Я решал эту проблему в течение нескольких дней и подозреваю, что проблема может быть связана с самой страницей. Кажется, что когда я загружаю страницу компании, она на короткое время отображает страницу SpaceX, прежде чем показывать страницу запрошенной компании.

Может кто-нибудь объяснить, что здесь может происходить?

Он загружается через JS, поэтому вы не сможете сделать это через beautifulsoup.

sommmen 05.04.2024 10:46

Он динамически загружается. Поэтому лучше использовать селен или его API отправки запросов.

LNTR 05.04.2024 11:25
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
2
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Контент загружается/отрисовывается динамически с помощью JavaScript. Иногда вы также можете увидеть его на странице, обновив ее, затем на короткое время отображается пробел, поскольку ресурс сначала загружается и отображается. Лишь доли секунды спустя отображается актуальная информация о компании.

Поэтому попробуйте вместо этого использовать API для одной компании:

https://foundersfund.com/wp-json/wp/v2/company?slug=figma

или для топ-100:

https://foundersfund.com/wp-json/wp/v2/company?per_page=100

Проверьте свои браузеры инструменты разработки на предмет сетевого трафика, чтобы понять, как найти такую ​​информацию.

Пример
import requests

headers = { 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    }

response = requests.get('https://foundersfund.com/wp-json/wp/v2/company?slug=figma', headers=headers).json()
response

Другие вопросы по теме