2017-02-14 11 views
0

を解析されていないHTMLを、私はどちらかのエラーまたは何も受け付けておりますが、次のコードで書かれた/解析されています=「値」)解析HTMLとBeautifulsoupを使用してCSVへの書き込みはAttributeErrorか

はAttributeError:「ResultSetの」オブジェクトは、だから私はちょうどそれをテストするために、印刷でループのためにしようとしたが、プログラムが正常に実行されながら、それは何も返さない無属性「find_all」

を持っていません。

userinfo = soup.find_all("div", attrs={"class": "fieldWrapper"}) 
for row in userinfo: 
    rows = row.find_all(attrs="value") 
    print(rows) 

これは私が解析しようとしているHTMLです。私は値からテキストを返すようにしようとしています属性:あなたはuserinfoの要素を反復処理する必要があります:

<div class="controlHolder"> 
         <div id="usernameWrapper" class="fieldWrapper"> 
          <span class="styled">Username:</span> 
          <div class="theField"> 
           <input name="ctl00$cleanMainPlaceHolder$tbUsername" type="text" value="username" maxlength="16" id="ctl00_cleanMainPlaceHolder_tbUsername" disabled="disabled" tabindex="1" class="textbox longTextBox"> 
           <input type="hidden" name="ctl00$cleanMainPlaceHolder$hdnUserName" id="ctl00_cleanMainPlaceHolder_hdnUserName" value="AAubrey"> 
          </div> 
         </div> 
         <div id="fullNameWrapper" class="fieldWrapper"> 
          <span class="styled">Full Name:</span> 
          <div class="theField"> 
           <input name="ctl00$cleanMainPlaceHolder$tbFullName" type="text" value="Full Name" maxlength="50" id="ctl00_cleanMainPlaceHolder_tbFullName" tabindex="2" class="textbox longTextBox"> 
           <input type="hidden" name="ctl00$cleanMainPlaceHolder$hdnFullName" id="ctl00_cleanMainPlaceHolder_hdnFullName" value="Anthony Aubrey"> 
          </div> 
         </div> 
         <div id="emailWrapper" class="fieldWrapper"> 
          <span class="styled">Email:</span> 
          <div class="theField"> 
           <input name="ctl00$cleanMainPlaceHolder$tbEmail" type="text" value="[email protected]" maxlength="60" id="ctl00_cleanMainPlaceHolder_tbEmail" tabindex="3" class="textbox longTextBox"> 
           <input type="hidden" name="ctl00$cleanMainPlaceHolder$hdnEmail" id="ctl00_cleanMainPlaceHolder_hdnEmail" value="[email protected]"> 
           <span id="ctl00_cleanMainPlaceHolder_validateEmail" style="color:Red;display:none;">Invalid E-Mail</span> 
          </div> 
         </div> 
         <div id="commentWrapper" class="fieldWrapper"> 
          <span class="styled">Comment:</span> 
          <div class="theField"> 
           <textarea name="ctl00$cleanMainPlaceHolder$tbComment" rows="2" cols="20" id="ctl00_cleanMainPlaceHolder_tbComment" tabindex="4" class="textbox longTextBox"></textarea> 
           <input type="hidden" name="ctl00$cleanMainPlaceHolder$hdnComment" id="ctl00_cleanMainPlaceHolder_hdnComment"> 
          </div> 
         </div> 

答えて

1

あなたの最初のエラーは、find_allが多かれ少なかれリストでResultSetを返すという事実から生じますその代わりにfind_allを呼び出してください。

2つ目の問題については、attrsに文字列が渡されたときに、その文字列を持つ要素をクラスとして検索していることを確認しています。あなたが提供したhtmlには、クラスvalueの要素が含まれていないので、何も印刷されないということは意味があります。要素の値にアクセスするには.get('value')

テキスト入力の値を出力するには、次のコードが有効です。 (除く試みは、/テキスト入力が見つからない場合はちょうどそうスクリプトがクラッシュしないで)

for field_wrapper in soup.find_all("div", attrs={"class": "fieldWrapper"}): 
    try: 
     print(field_wrapper.find("input", attrs={"type": "text"}).get('value')) 
    except: 
     continue 
+0

私はあなたが何を意味するか見て、私はあなたが提供されたコードを使用してみましたが、再び、それは何も出力しません。フォームからテキストを取得しようとしているので、value = "username" value = "Full Name" value = "[email protected]"のテキストを取得しようとしています。 – nvachhan

+0

Gotcha。上記の私の編集した答えは、あなたが提供したソースHTMLでBeautifulSoupを初期化するときに期待される出力を出力します。それでも何も表示されない場合は、可能な 'browser.page_source'が期待どおりでないか、パーサがページを正しく処理していません。 – lanceg

+0

私はあなたが書いた新しいバージョンを試しましたが、何も残っていませんでした。私は 'except:print( 'no text found')'だけを表示しましたが、まだ何も印刷されていないかどうかを見るために、これは奇妙に思えます。おそらくページソースに何か間違っていると思われます。私はセレンを使用してコード内のこの点に問題はありません。 – nvachhan

関連する問題