AttributeError:'NoneType'对象没有属性'find_all'Beautifulsoup错误类

时间:2019-05-27 14:45:31

标签: python html web-scraping beautifulsoup

我正在尝试通过以下链接获取房屋价格:https://www.bienici.com/recherche/achat/france?page=2

我需要知道程序有什么问题吗?

我的程序:

 from bs4 import BeautifulSoup
 import requests
 import csv

 with open("out.csv", "w", newline="") as f:
     writer = csv.writer(f)
     writer.writerow("Prix") 

     for i in range(1, 20):
         url = "https://www.bienici.com/recherche/achat/france?page=%s" % i
         soup = BeautifulSoup(requests.get(url).text, "html.parser")
         data = soup.find(class_="resultsListContainer")

         for data in data.find_all(class_="sideListItemContainerInTableForListInResult"):
             prix = data.find("span", {"class": "thePrice"})
             prix = prix.text if prix else ""

             writer.writerow(prix)

我收到此错误:

   Traceback (most recent call last):
     File "1.py", line 16, in <module>
        for data in data.find_all(class_="sideListItemContainerInTableForListInResult"):
   AttributeError: 'NoneType' object has no attribute 'find_all'

我认为我的错误是在class _ =“ sideListItemContainerInTableForListInResult”中,但是当我检查html代码时,我认为这是正确的!!

2 个答案:

答案 0 :(得分:1)

这里的问题是dataNoneType,即data = soup.find(class_="resultsListContainer")返回None,这意味着for循环将失败。

对于您要解决的确切问题,我不太了解,这是您的代码是否有问题,或者网站有时在“ resultListContainer”类中没有任何内容。如果某些时候缺少这种情况,则可以在到达for循环之前进行检查,以确保data变量不是None

答案 1 :(得分:1)

看起来您可以通过json响应访问数据。您将不得不使用参数,并深入研究json结构以提取所需的内容,但是看起来您可以获取很多数据:

import requests

payload = {'filters': '{"size":24,"from":0,"filterType":"buy","propertyType":["house","flat"],"newProperty":false,"page":2,"resultsPerPage":24,"maxAuthorizedResults":2400,"sortBy":"relevance","sortOrder":"desc","onTheMarket":[true],"limit":"ih{eIzjhZ?q}qrAzaf}AlrD?rvfrA","showAllModels":false,"blurInfoType":["disk","exact"]}'}


url = 'https://www.bienici.com/realEstateAds.json'  
response = requests.get(url, params = payload).json()

for prop in response['realEstateAds']:
    title = prop['title']
    city = prop['city']
    desc = prop['description']
    price = prop['price']

    print ('%s - %s\n%s\n%s' %(price, title, city, desc))

输出:

print ('%s - %s\n%s\n%s' %(price, title, city, desc))
1190000 - BALMA - Bien d'exception 12 pièces 400 m2
Pin-Balma
- EXCLUSIVITÉ - Bien d'exception à BALMA (31130) . - 400 m2 - 12 pièces - 7 chambres - Sur 3000 m2 de terrain. . Luxe, calme et volupté dans cette magnifique et très rare maison divisée en deux lots d'habitation communicants (qui peuvent aussi être indépendants). L'un de 260 m2 et l'autre de 140 m2. Chacun avec son entrée, son séjour, sa cuisine, ses salles de bains et pièces d'eau, ses chambres, ses terrasses et ses équipements de qualité. Et ce, ouvrant le champ des possibles quant aux projets potentiels !. . Cette bâtisse de prestige du milieu du XVIIIème siècle a vu ses rénovations et prestations inhérentes réalisées avec des matériaux et des façons d'excellence.. . Sur les 3000 m2 de terrain, un jardin paysager orne les abords de la maison et de la piscine. Puis, vous trouverez un pré et un bois privé qui réveilleront vos aspirations bucoliques. Vous pourrez ainsi vous blottir dans un écrin précieux niché à proximité de TOULOUSE.. . Vos hôtes et vous serez à proximité des commodités, des transports (dont le métro), des cliniques, des établissements scolaires et des hypermarchés ; et tout aussi proches d'Airbus (BLAGNAC et Défense), du CEAT, des SSII, de Orange Business Services, etc.. . Recevez notre invitation au voyage, là où tout n'est qu'ordre et beauté, Luxe, calme et volupté.. . Visite virtuelle disponible en agence ou en LiveRoom avec un de nos conseillers.

要获取csv,您需要将其转换为数据框。现在json结构是嵌套的,因此有些列不会被完全展平。有一些方法可以解决这个问题,但要获得基本的数据框:

from pandas.io.json import json_normalize

df = json_normalize(response['realEstateAds'])

输出:

print (df.to_string())
   accountType  adCreatedByPro adType adTypeFR  addressKnown  agencyFeePercentage                                       agencyFeeUrl  annualCondominiumFees             availableDate  balconyQuantity  balconySurfaceArea  bathroomsQuantity  bedroomsQuantity                                      blurInfo.bbox  blurInfo.centroid.lat  blurInfo.centroid.lon blurInfo.origin  blurInfo.position.lat  blurInfo.position.lon  blurInfo.radius blurInfo.type                 city  condominiumPartsQuantity                                        description  descriptionTextLength district.code_insee district.cp  district.id  district.id_polygone  district.id_type district.insee_code                                   district.libelle                                      district.name district.postal_code  district.type_id  enclosedParkingQuantity  endOfPromotedAsExclusive energyClassification  energyValue      exposition feesChargedTo  floor  floorQuantity greenhouseGazClassification  greenhouseGazValue hasAirConditioning hasAlarm hasBalcony hasCaretaker hasCellar hasDoorCode hasElevator hasFirePlace hasGarden hasIntercom hasPool hasSeparateToilet hasTerrace                    heating  highlightMailContact                              id isCalm isCondominiumInProcedure isDisabledPeopleFriendly isExclusiveSaleMandate isInCondominium isRefurbished isStudio  landSurfaceArea          modificationDate needHomeStaging newOrOld  newProperty  nothingBehindForm  parkingPlacesQuantity                                             photos postalCode    price  priceHasDecreased  pricePerSquareMeter  priceWithoutFees propertyType           publicationDate          reference  roomsQuantity  showerRoomsQuantity  status.autoImported  status.closedByUser  status.highlighted  status.is3dHighlighted  status.isLeading  status.onTheMarket  surfaceArea  terracesQuantity             thresholdDate                                              title  toiletQuantity transactionType      userRelativeData.accountIds  userRelativeData.canChangeOnTheMarket  userRelativeData.canModifyAd  userRelativeData.canModifyAdBlur  userRelativeData.canSeeAddress  userRelativeData.canSeeContacts  userRelativeData.canSeeExactPosition  userRelativeData.canSeePublicationCertificateHtml  userRelativeData.canSeePublicationCertificatePdf  userRelativeData.canSeeRealDates  userRelativeData.canSeeStats userRelativeData.importAccountId  userRelativeData.isAdModifier  userRelativeData.isAdmin  userRelativeData.isFavorite  userRelativeData.isNetwork  userRelativeData.isOwner                  userRelativeData.searchAccountIds                                       virtualTours  with360  with3dModel workToDo  yearOfConstruction
0       agency            True    buy    vente          True                  NaN  https://www.immoceros.fr/mentions-legales-hono...                 2517.0                       NaN              NaN                 NaN                1.0                 3             [2.27006, 48.92827, 2.27006, 48.92827]              48.928270               2.270060          manual              48.928270               2.270060              NaN         exact             Colombes                      47.0  COLOMBES | Agent-Sarre - Champarons |\r\nSitué...                   1149               92025       92700       100331                100331                 1               92025                                Fossés Jean Bouvier                     Colombes - Fossés Jean Bouvier                92700                 1                      NaN                         0                    D       197.00             NaN        seller    5.0            6.0                           B                9.00                NaN      NaN      False          NaN     False         NaN        True          NaN     False         NaN     NaN               NaN       True     électricité individuel                 False              ag922079-195213238    NaN                      NaN                      NaN                   True            True           NaN      NaN              NaN  2019-05-11T08:53:15.943Z             NaN   ancien        False               True                    2.0  [{'url_photo': 'http://photos.ubiflow.net/9220...      92700   469000              False          5097.826087          469000.0         flat  2019-04-23T18:42:59.742Z  VA1952-IMMOCEROS2              4                  1.0                 True                False               False                   False              True                True        92.00               NaN                       NaN  COLOMBES  | APPARTEMENT A VENDRE | 4 PIECES - ...             1.0             buy  [ubiflow-easybusiness-ag922079]                                  False                         False                             False                           False                            False                                 False                                              False                                             False                             False                         False         558bbfd06fbf04e50075bbce                          False                     False                        False                       False                     False  [ubiflow-easybusiness-ag922079, contract-type-...  [{'originalUrl': 'https://www.nodalview.com/bK...     True        False      NaN                 NaN
1       agency            True    buy    vente          True                  NaN                                                NaN                    NaN                       NaN              NaN                 NaN                NaN                 1  [7.251231, 43.700846999999996, 7.251231, 43.70...              43.700847               7.251231          custom              43.700847               7.251231              NaN         exact                 Nice                       NaN  A vendre à Nice dans le quartier Grosso / Tzar...                   1542               06088       06000       300102                300102                 1               06088                            Parc Impérial - Le Piol                     Nice - Parc Impérial - Le Piol                06000                 1                      NaN                         0                    E       270.00           Ouest           NaN    NaN            7.0                           C               14.00                NaN      NaN        NaN          NaN       NaN         NaN        True          NaN       NaN        True     NaN               NaN        NaN                Individuel                  False                   apimo-2871096    NaN                      NaN                      NaN                   True             NaN           NaN      NaN              NaN  2019-04-25T17:04:27.723Z             NaN      NaN        False               True                    NaN  [{'url_photo': 'https://d1qfj231ug7wdu.cloudfr...      06000   215000              False          4383.282365               NaN         flat  2019-04-04T18:04:38.323Z               1508              2                  NaN                 True                False               False                   False             False                True        49.05               NaN                       NaN  Nice François Grosso : F2 dernier étage, terra...             NaN             buy                     [apimo-3120]                                  False                         False                             False                           False                            False                                 False                                              False                                             False                             False                         False         5913331e150de0009ce38406                          False                     False                        False                       False                     False  [apimo-3120, contract-type-basic, 5913331e150d...  [{'originalUrl': 'https://www.nodalview.com/PX...     True        False    False                 NaN
2       agency            True    buy    vente          True                  NaN                                                NaN                    NaN                       NaN              NaN                 NaN                NaN                 0  [7.2526839999999995, 43.69589099999998, 7.2526...              43.695891               7.252684          custom              43.695891               7.252684              NaN         exact                 Nice                       NaN  Joli studio entièrement meublé et équipé à ven...                   1205               06088       06000       300070                300070                 1               06088                                           Gambetta                                    Nice - Gambetta                06000                 1                      NaN                         0                    D       224.47             Est           NaN    2.0            6.0                           B                8.49               True      NaN        NaN          NaN       NaN         NaN        True          NaN       NaN        True     NaN               NaN        NaN                Individuel                  False                   apimo-1008273    NaN                      NaN                      NaN                   True             NaN           NaN     True              NaN  2019-04-24T17:02:19.834Z             NaN      NaN        False               True                    NaN  [{'url_photo': 'https://d1qfj231ug7wdu.cloudfr...      06000   145000              False          6722.299490               NaN         flat  1970-01-01T00:00:00.000Z               1496              1                  NaN                 True                False               False                   False             False                True        21.57               NaN  2019-03-29T09:52:38.387Z        Nice proche mer : studio meublé avec balcon             NaN             buy                     [apimo-3120]                                  False                         False                             False                           False                            False                                 False                                              False                                             False                             False                         False         5913331e150de0009ce38406                          False                     False                        False                       False                     False  [apimo-3120, contract-type-basic, 5913331e150d...  [{'originalUrl': 'https://www.nodalview.com/xV...     True        False    False                 NaN
3       agency            True    buy    vente          True                  NaN  http://www.willman.fr/i/redac/honoraires?honof...                    NaN  2017-12-27T00:00:00.000Z              NaN                 NaN                3.0                 3  [7.165397, 43.666337999999996, 7.165397, 43.66...              43.666338               7.165397        accounts              43.666338               7.165397              NaN         exact       Cagnes-sur-Mer                       NaN  Située dans le quartier recherché des Bréguièr...                   1229               0

然后保存它:

df.to_csv('file.csv', index=False)