2016-11-11 7 views
0

Я пытаюсь очистить текст и текст от выпадающего элемента на веб-странице, используя комбинацию Python с селеном и Beautiful Soup.очистить значение от выпадающего списка

Я могу получить текст, но я не могу получить значение через команду get_attribute.

При печати элемент, который я, расположенный на веб-странице он возвращает следующее содержание

print(price)

Печатное утверждение, что получает он выдает ошибку:

None Type object is not callable 

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

Вывод для печати (цена)

<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> 

URL o е веб-страница

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

Это потому, что get_attribute, кажется None. Это недействительный атрибут объекта prices. Таким образом, это не функция, которую вы можете назвать - отсюда и ошибка. Если вы убрали круглые скобки и только что напечатали prices.get_attribute, ничего не напечатало бы, потому что значение равно None.

Кроме того, тег <select> не имеет атрибута «значение» в первую очередь. То, что вы сделали, это захват тега <select> и всех его детей. Каждый ребенок в теге <select> (теги <option>) имеет атрибут «значение». Если вы пытаетесь получить все значения всех <option> тегов в этом <select>, то вы должны сделать следующее:

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

Смежные вопросы