В настоящее время я работаю над проектом парсинга веб-страниц и столкнулся с проблемой при парсинге данных из 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
Вывод возвращает это:
Я ожидал получить информацию о Figma, но вместо этого получил информацию о SpaceX. Интересно, что при попытке просмотреть страницы других компаний, например https://foundersfund.com/company/spotify/ или https://foundersfund.com/company/airbnb/, я столкнулся с той же проблемой. вместо этого появилась SpaceX. Я решал эту проблему в течение нескольких дней и подозреваю, что проблема может быть связана с самой страницей. Кажется, что когда я загружаю страницу компании, она на короткое время отображает страницу SpaceX, прежде чем показывать страницу запрошенной компании.
Может кто-нибудь объяснить, что здесь может происходить?
Он динамически загружается. Поэтому лучше использовать селен или его API отправки запросов.
Контент загружается/отрисовывается динамически с помощью 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
Он загружается через JS, поэтому вы не сможете сделать это через beautifulsoup.