2016-12-25 32 views
0

私はPython Webコースを開始しましたが、私はBeautifulSoupを使用してHTMLデータを解析しようとしていました。私は研究しましたが、正確で特定の解決策を見つけることができませんでした。だからここにコードの一部です:AttributeError: 'NoneType'オブジェクトに属性 'text'がありません - Python、BeautifulSoup Error

import requests 
    from bs4 import BeautifulSoup 

    request = requests.get("http://www.johnlewis.com/toms-berkley-slipper-grey/p3061099") 
    content = request.content 
    soup = BeautifulSoup(content, 'html.parser') 
    element = soup.find(" span", {"itemprop ": "price ", "class": "now-price"}) 
    string_price = (element.text.strip()) 
    print(int(string_price)) 


    # <span itemprop="price" class="now-price"> £40.00 </span> 

そして、これは私が直面しているエラーです:

C:\Users\IngeniousAmbivert\venv\Scripts\python.exe 

    C:/Users/IngeniousAmbivert/PycharmProjects/FullStack/price-eg/src/app.py 

    Traceback (most recent call last): 
     File "C:/Users/IngeniousAmbivert/PycharmProjects/FullStack/price-eg/src/app.py", line 8, in <module> 
      string_price = (element.text.strip()) 
    AttributeError: 'NoneType' object has no attribute 'text' 

Process finished with exit code 1 

任意の助けが必要ですこのも使用してCSSセレクタのように試すことができます

答えて

1

問題は、あなたは、タグ名の内部で持っている属性名と属性値を余分な空白文字で、交換してください:

element = soup.find(" span", {"itemprop ": "price ", "class": "now-price"}) 

で:その後

element = soup.find("span", {"itemprop": "price", "class": "now-price"}) 

文字列の変換時に修正する2つの追加事項:

  • ストリップ代わりint()

固定バージョンのままに

  • 使用float()から£文字:あなたが40.00を印刷見ること

    element = soup.find("span", {"itemprop": "price", "class": "now-price"}) 
    string_price = (element.get_text(strip=True).lstrip("£")) 
    print(float(string_price)) 
    

  • +0

    ありがとうございます。それはうまくいった。しかし、あなたが素晴らしいコードを作ることができたら。私が言及したように私はpythonの初心者と私はこの文を理解できませんでした:string_price =(element.get_text(strip = True).lstrip( "£"))。ありがとうございます –

    +0

    @ user7338971絶対に。 '.get_text(strip = True)'は、要素のテキストを取得し、テキストの周りの余分な改行や空白をすべて取り除くのに役立ちます。通常は '.strip()'で行いますが、bs4には 'get_text ) 'メソッドを使用します。これは非常に便利です。その後、私たちはポンド記号を残しました。事がより明確になることを願っています。 – alecxe

    +0

    私は本当に感謝しています。ご協力いただきありがとうございます 。それは有り難いです 。 –

    0

    を理解されるであろう。

    import requests 
    from bs4 import BeautifulSoup 
    
    request = requests.get("http://www.johnlewis.com/toms-berkley-slipper-grey/p3061099") 
    content = request.content 
    soup = BeautifulSoup(content, 'html.parser') 
    # print soup 
    element = soup.select("div p.price span.now-price")[0] 
    print element 
    string_price = (element.text.strip()) 
    print(int(float(string_price[1:]))) 
    

    出力:

    <span class="now-price" itemprop="price"> 
                  £40.00 
                   </span> 
    40