Веб-парсинг на Python с использованием Beautiful Soup

Я пытался отбросить данные о новых объектах недвижимости для проекта. Я получаю сообщение об ошибке "NoneType", у объекта нет атрибута "get_text", когда я пытаюсь получить количество кроватей из Интернета. Умею получить не только спальню, но и другие атрибуты

ссылка: - https://www.99acres.com/search/property/buy/residential-all/ahmedabad-all?search_type=QS&refSection=GNB&search_location=NRI&lstAcn=NR_R&lstAcnId=-1&src=CLUSTER&preference=abs&preference=Sresselected=CLUSTER&preference_type=Sresselected&preference=Sresselected R & isvoicesearch = N & keyword_suggest = Ахмадабад%20(Все)%3B & fullSelectedSuggestions = Ахмадабад%20(Все) & strEntityMap = W3sidHlwZSI6ImNpdHkifSx7IjEiOlsiQWhtZWRhYmFkIChBbGwpIiwiQ0lUWV80NSwgUFJFRkVSRU5DRV9TLCBSRVNDT01fUiJdfV0%3D & texttypedtillsuggestion = ahme & refine_results = Y & Refine_Localities = Усовершенственный%20Localities & действие =%2Fdo%2Fquicksearch%2Fsearch & предложение = CITY_45%2C%20PREFERENCE_S%2C%20RESCOM_R & searchform = 1 & price_min = null & price_max = null

вот мой код

titles = []
prices = []
super_area = []
bhk = []
move = []
for post in item:
    title = post.find(id='srp_tuple_property_title').get_text().strip()
    price = post.find(id='srp_tuple_price').get_text().strip()
    area = post.find(id='srp_tuple_primary_area').get_text().strip()
    moves = post.find(class_='badges__secondaryLargeSubtle').get_text().strip()
    bed = post.find(id='srp_tuple_bedroom').get_text().strip()
    bhk.append(bed)
    move.append(moves)
    super_area.append(area)
    prices.append(price)
    titles.append(title)

1 ответ

Попробуйте использовать базовый API. Проверка фактического вызова API после фильтрации даст вам правильный URL.

import requests

url = "https://www.99acres.com/api-aggregator/project/searchWidget?area_unit=1&platform=DESKTOP&moduleName=GRAILS_SRP&workflow=GRAILS_SRP&city=45&preference=S&res_com=R&page=1&page_size=10&isCrossSell=false"
data = requests.get(url=url).json()
print(data['newProjects'][1]['propTypeStr'])
# 2 BHK Apartment

Фильтрация изменит параметры URL, например:

https://www.99acres.com/api-aggregator/srp/search?bedroom_num=3&budget_min=136&locality_array=6046%2C6038&area_min=1900&area_unit=1&localityNameMap=%5Bobject%20Object%5D&platform=DESKTOP&moduleName=GRAILS_SRP&workflow=GRAILS_SRP&page_size=30&page=1&city=45&preference=S&res_com=R&seoUrlType=DEFAULT

Это можно разбить с помощью urllib:

from urllib import parse

url = "https://www.99acres.com/api-aggregator/srp/search?bedroom_num=3&budget_min=136&locality_array=6046%2C6038&area_min=1900&area_unit=1&localityNameMap=%5Bobject%20Object%5D&platform=DESKTOP&moduleName=GRAILS_SRP&workflow=GRAILS_SRP&page_size=30&page=1&city=45&preference=S&res_com=R&seoUrlType=DEFAULT"
parse.parse_qs(parse.urlparse(url).query)
# {'bedroom_num': ['3'],
#  'budget_min': ['136'],
#  'locality_array': ['6046,6038'],
#  'area_min': ['1900'],
#  'area_unit': ['1'],
#  'localityNameMap': ['[object Object]'],
#  'platform': ['DESKTOP'],
#  'moduleName': ['GRAILS_SRP'],
#  'workflow': ['GRAILS_SRP'],
#  'page_size': ['30'],
#  'page': ['1'],
#  'city': ['45'],
#  'preference': ['S'],
#  'res_com': ['R'],
#  'seoUrlType': ['DEFAULT']}
Другие вопросы по тегам