#html #beautifulsoup
#HTML #beautifulsoup
Вопрос:
Я пытаюсь собрать всю информацию из archdaily на нескольких страницах веб-сайта (например, со страницы 1 по 20).
Структура html выглядит следующим образом:
<div>
<div class = 'afd-container-main afd-container-main--margin-bottom nft-container-main-search clearfix afd-mobile-margin search-container'>
::before
<div>
<div class='gridview'>
<div>
<div data-insights-category>
<a href = '...'> # this is the htmls i wanted
Код, который я использую, это
soup = BeautifulSoup(html, 'html')
for foo in soup.find_all('div'):
bar = foo.find('div', attrs={'class': 'afd-container-main afd-container-main--margin-bottom nft-container-main-search clearfix afd-mobile-margin search-container'})
print(bar.text)
Сообщение об ошибке
AttributeError: 'NoneType' object has no attribute 'text'
Я что-то недопонимаю?
Комментарии:
1. Во-первых, загляните в свой суп — почти в 99% случаев информация, которую ищут люди, отсутствует в супе — Просто чтобы улучшить ваш вопрос, было бы здорово добавить также информацию о том, как вы получаете свой html, исправляете опечатки и правильное сообщение об ошибке — Спасибо
Ответ №1:
Примечание: Поскольку вопрос не раскрывает, как вы получаете свой HTML-код, ответить на него не так-то просто.
Если вы используете requests
, вы не получите результатов таким образом, потому что сайт имеет дело с динамическим обслуживаемым контентом.
Альтернативные подходы:
- Получить информацию с
requests
помощью api (предоставляет еще больше информации — категории, компании, …)#iterate over pages for p in range(1,3): r = requests.get(f'https://www.archdaily.com/search/api/v1/us/projects/categories/residential-architecture?page={p}') #url of next page for item in r.json()['results']: # iterate over results and print title url print(item['title'], item['url'])
- Получить визуализацию
html
через Selenium
Пример
import requests
for p in range(1,2):
r = requests.get(f'https://www.archdaily.com/search/api/v1/us/projects/categories/residential-architecture?page={p}') #url of next page
for item in r.json()['results']:
print(item['title'], item['url'])
Вывод
Wooden House / derksen | windt architecten https://www.archdaily.com/972995/wooden-house-derksen-windt-architecten?ad_source=searchamp;ad_medium=projects_tab
PLA2 House / Dersyn Studio https://www.archdaily.com/972939/pla2-house-dersyn-studio?ad_source=searchamp;ad_medium=projects_tab
gjG House / BLAF Architecten https://www.archdaily.com/951845/gjg-house-blaf-architecten?ad_source=searchamp;ad_medium=projects_tab
Leopoldo 1201 Residential Building / aflalo/gasperini arquitetos https://www.archdaily.com/972959/leopoldo-1201-residential-building-aflalo-gasperini-arquitetos?ad_source=searchamp;ad_medium=projects_tab
Sayang House / Carlos Gris Studio https://www.archdaily.com/972773/sayang-house-carlos-gris-studio?ad_source=searchamp;ad_medium=projects_tab
Nong Ho 17 House / Skarn Chaiyawat https://www.archdaily.com/972911/nong-ho-17-house-skarn-chaiyawat?ad_source=searchamp;ad_medium=projects_tab
LÂM’s Home / AD studio https://www.archdaily.com/972794/lams-home-ad-plus-studio?ad_source=searchamp;ad_medium=projects_tab
Limestone House / John Wardle Architects https://www.archdaily.com/972958/limestone-house-john-wardle-architects?ad_source=searchamp;ad_medium=projects_tab
Quay Wall House / Thomas Kemme Architects https://www.archdaily.com/971781/quay-wall-house-thomas-kemme-architects?ad_source=searchamp;ad_medium=projects_tab
...
Комментарии:
1. я не знал динамического содержимого и застрял там. большое спасибо за ваше предложение!
2. Мы все здесь для того, чтобы учиться и развиваться — вы разработаете стратегии, позволяющие избежать подобных камней преткновения в будущем. Ищите официальный api, вызовы api, используйте selenium, ….