2017-04-18 1 views
2
from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html= urlopen("http://www.pythonscraping.com/pages/page3.html") 
soup= BeautifulSoup(html.read()) 
print(soup.find("img",{"src":"../img/gifts/img1.jpg" 
}).parent.previous_sibling.get_text()) 

Le code ci-dessus fonctionne bien mais pas celui ci-dessous.Il donne une erreur d'attribut comme indiqué ci-dessus. Quelqu'un peut-il me dire la raison?Erreur d'attribut: l'objet 'NoneType' n'a pas d'attribut 'parent'

from urllib.request import urlopen  
from bs4 import BeautifulSoup 
html= urlopen("http://www.pythonscraping.com/pages/page3.html") 
soup= BeautifulSoup(html.read()) 
price =soup.find("img",{"src=":"../img/gifts/img1.jpg" 
}).parent.previous_sibling.get_text() 
print(price) 

Merci! :)

+0

à la fois donner 15,00 $ – Serge

+0

Je voudrais pouvoir dire la même chose .. J'ai essayé de redémarrer et tout sauf la même erreur. Je vais essayer de regarder dans le code une fois de plus. Merci – Xexus

Répondre

0

Si vous comparez la première et la deuxième version, vous remarquerez que:

Première:soup.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text()

  • Note: "src"

Deuxième:soup.find("img","src=":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text()

  • Note: "src="

Le second code renvoie Attribute Error:'NoneType' object has no attribute 'parent' parce qu'il n'a pas pu trouver src=="../img/gifts/img1.jpg" dans la soupe fournie. Donc, si vous supprimez le = dans la deuxième version, cela devrait fonctionner.


BTW, vous devez explicitement quel analyseur que vous voulez utiliser, sinon bs4 renverra l'avertissement suivant:

UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently.

To get rid of this warning, change code that looks like this:

BeautifulSoup([your markup])

to this:

BeautifulSoup([your markup], "lxml")

Ainsi, comme indiqué dans le message d'avertissement, il vous suffit de changer soup = BeautifulSoup(html.read()) à soup = BeautifulSoup(html.read(), 'lxml'), par exemple.

+0

Je suis très nouveau à tout cela. Merci beaucoup!! – Xexus