2016-03-23 2 views
1

, если у меня есть HTML-код, как этотпитон BeautifulSoup получить конкретный элемент

<div class="new_info_next"> 
    <input type="hidden" value="133" id="new_id" class="new_id"> 
    <input type="hidden" value="0" id="default_pe" class="default_pe"> 
</div> 

и я хочу, чтобы получить только 133 в input в первой строке я попробовать этот код с помощью BeautifulSoup4

info = soup.find_all("div", {"class": "new_info_next"}) 
for inpu in info: 
    for inpu1 in inpu.select('input'): 
     print inpu1 .get('value') 

Но выход был

133 
0 

как получить только 133

ответ

1

Поскольку вы хотите только первый элемент итератора, обращаясь непосредственно должно работать:

first = inpu.select('input')[0].get('value') 
print(first) 
+0

Я твердо верю, что мой ответ более эффективен, чем этот. Это * находит все соответствующие элементы *, а затем получает в первую очередь те, мой просто захватывает первый, который соответствует. – northsideknight

+0

@northsideknight find() реализуется путем вызова find_all() внутри BSoup, а find_all() - это генератор, поэтому я предполагаю, что разница в производительности незначительна, когда дело доходит до производительности. – MatsLindh

2

использование soup.find()

по умолчанию он получит вам первый элемент согласования, так что вы можете сделать:

info = soup.find("div", {"class": "new_info_next"}) 

и info.get ('значение') должно быть 133

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