2017-07-24 7 views
1

J'ai essayé de créer un grattoir web qui recueille le nom, le prix et le quartier d'un objet sur un site Web, mais ne peut rien faire avec parce qu'il soulève une erreur:Attribut toujours Aucun

AttributeError: 'NoneType' object has no attribute 'strip'.

Que fais-je? Aidez-moi! Aussi, comment puis-je aller à la deuxième div? Quand je fais districtcontainers = souped.find_all("div",{"class":"announcement-block-link") puis districtcontainers[0].div.div, il donne 0 sortie. Comment résoudre cela? Merci beaucoup pour votre attention et vos réponses :).

import urllib.request as uReq 
from bs4 import BeautifulSoup as soup 


url = uReq.urlopen("https://www.bazaraki.com/real-estate/houses-and-villas-rent/larnaka-district-larnaca/") 
html = url.read() 
souped = soup(html,"html.parser") 
containers = souped.find_all("div",{"class":"announcement-block-text-container"}) 
districtcontainers = souped.find_all("div",{"class":"announcement-block__location"}) 
for container in containers: 
    for districtcontainer in districtcontainers: 
     title = container.a 
     price = container.p 
     district = districtcontainer 
     print("{}:\n Costs: \n District:{}".format(title.string.strip(),price.string.strip(),district.string.strip())) 
+1

Essayez 'title.text' ou' title.content'? –

+0

essayer, il dit erreur EOF encore –

+0

Cela fonctionne, mais il renvoie chaque article comme une centaine de fois –

Répondre

1

D'abord, votre dernière déclaration d'impression a seulement deux {}, mais vous avez trois variables dans l'appel de format suivant, il est juste une faute de frappe donc il est pas la cause du problème. Deuxièmement, il semble que l'une de vos variables se voit attribuer une valeur de None par votre appel à l'objet mis en pot. Vérifiez simplement le codage de la page pour vous assurer que les valeurs que vous recherchez sont dans la bonne position. BeautifulSoup retournera None si vous appelez pour une section qui n'est pas là au lieu d'élever une erreur. Comme il semble que l'exception soit levée pendant l'exécution de l'appel d'impression, vérifiez simplement que vos trois appels renvoient des valeurs pour votre affectation de variable. Pour accéder à la deuxième div dans une page, vous souhaiterez peut-être vérifier l'appel de méthode next_sibling.

+0

Pourriez-vous s'il vous plaît m'aider avec la chose. Div.div? .next_sibling renvoie "\ n". Je ne peux pas analyser n'importe quelle page à cause de cela –

+0

Vous pouvez utiliser plusieurs next_sibling sur une même instance, donc cela peut prendre plusieurs next_sibling pour accéder au texte réel ou à l'instance suivante d'un élément HTML. Je suggère next_sibling et éventuellement next_element car ils assurent qu'une valeur est retournée au lieu de créer une autre erreur Nonetype que vous obtenez. – Vorboto