2016-11-11 3 views
0

나는 셀레늄과 아름다운 스프와 함께 파이썬의 조합을 사용하여 웹 페이지의 드롭 다운 요소에서 값과 텍스트를 긁어 내려고합니다.드롭 다운에서 값을 긁습니다

텍스트를 가져올 수 있지만 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')) 

출력 : 내가 웹 페이지에있는 요소를 인쇄 할 때

다음과 같은 내용

print(price)

는 오류를 제공 얻는다 인쇄 문을 반환 (가격)은

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

웹 페이지가

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

입니다 f를 get_attributeNone 것 같다 때문이다. prices 개체의 유효한 특성이 아닙니다. 따라서 호출 할 수있는 함수가 아니므로 오류가 발생합니다. 괄호를 제거한 후 prices.get_attribute을 인쇄하면 값이 None이므로 아무 것도 인쇄되지 않습니다.

또한 <select> 태그에는 처음에 "값"속성이 없습니다. 당신이 한 일은 <select> 태그를 움켜 잡았고 그것들 모두는 자식들입니다. <select> 태그 (<option> 태그)의 각 자식에는 "value"속성이 있습니다. 당신이 <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

관련 문제