2016-11-11 7 views
0

私はPythonとセレンと美しいスープの組​​み合わせを使ってウェブページ上のドロップダウン要素から値とテキストをスクラップしようとしています。ドロップダウンから値を削り取る

テキストを取得できましたが、get_attributeコマンドで値を取得できません。印刷用

None Type object is not callable 

price=soup.find("select",{"id":"space-prices"}) 
print(price) 
print(price.text) 
print(price.get_attribute('value')) 

出力:私は、Webページ上にある要素を印刷するとき

それは、次の内容

print(price)

それがエラーを与える取得print文を返します。 (価格)は

<select class="pricing-bar-select" id="space-prices" name="space-prices"><option selected="selected" value="£360">Per Day</option> 
<option value="£1,260">Per Week</option> 
<option value="£5,460">Per Month</option> 
<option value="£16,380">Per Quarter</option> 
<option value="£65,520">Per Year</option></select> 

です。 Webページfをget_attributeNoneのようですので、それはです

https://www.appearhere.co.uk/spaces/north-kensington-upcycling-store-and-cafe

+0

エラーを再現するためのサンプルコードは参考になりますful。 – mpaskov

+0

こんにちは@mpaskov。私はスタックオーバーフローの新しいです。コードを書式設定してここに貼り付ける方法はわかりません。ご不便おかけしてすみません。問題のハイパーリンクの価値をご覧ください。 –

+0

ちょうどコピー&ペーストし、ctrl-Kを使用してコードとしてフォーマットします。 – Julien

答えて

1

これを試してみてください。

from selenium import webdriver 
from bs4 import BeautifulSoup 


driver = webdriver.Chrome() 
url= "https://www.appearhere.co.uk/spaces/north-kensington-upcycling-store-and-cafe" 
driver.maximize_window() 
driver.get(url) 

content = driver.page_source.encode('utf-8').strip() 
soup = BeautifulSoup(content,"html.parser") 
price=soup.find("select",{"id":"space-prices"}) 
options = price.find_all("option") 
options1=[y.text for y in options] 
values = [o.get("value") for o in options] 
for x in range(5): 
    print options1[x], values[x].encode('utf8') 
driver.quit() 

それは

印刷します
Per Day £360 
Per Week £1,260 
Per Month £5,460 
Per Quarter £16,380 
Per Year £65,520 

希望がこれです。

+0

ありがとう@thebadguy。これは私の必要条件です。 –

1

です。これはpricesオブジェクトの有効な属性ではありません。だからあなたが呼び出すことができる機能ではなく、したがってエラーです。かっこを取り除いてprices.get_attributeを印刷した場合、値はNoneなので何も印刷されません。

また、<select>タグには最初に「値」属性がありません。あなたがしたことは、<select>タグをつかんで、そのすべてが子どもだということです。 <select>タグ(<option>タグ)の各子には、「値」属性があります。あなたがその<select><option>すべてのタグのすべての値を取得しようとしている場合は、次の作業を行う必要があります。

price=soup.find("select",{"id":"space-prices"}) 

# get all <options> in a list 
options = price.find_all("option") 

# for each element in that list, pull out the "value" attribute 
values = [o.get("value") for o in options] 
print(values) 
#[u'\xa3360', u'\xa31,260', u'\xa35,460', u'\xa316,380', u'\xa365,520'] 
+0

ありがとう。私は問題がある。あなたのコードは働いた。 –

+0

問題ありません!お役に立てて嬉しいです。 – TheF1rstPancake

関連する問題