2016-11-09 2 views
2

Я пытаюсь вытащить избирательные избирательные голоса, чтобы проверить, когда они обновляются. Но сложная часть заключается в том, что все классы меняются при каждом обновлении. Я хочу найти текст Trump, а затем найти следующий элемент, который является счетчиком.Beautiful Soup Grabbing next element

я могу найти элемент, путем поиска строки Trump:

import requests 
import re 
from bs4 import BeautifulSoup 
url = "https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=who+is+winning+the+presidential+election&eob=enn/p//1/0///////////" 
r = requests.get(url) 
soup = BeautifulSoup(r.content) 
elm = soup.find(text='Trump') 
print elm.text 

Я нашел элемент Трампа, с lm = soup.find(text='Trump'), но я не знаю, как захватить следующий элемент после того.

ответ

3

Ваш текущий код ищет точное соответствие узла с этим текстом. Попробуйте следующее:

soup.body.findAll(text=re.compile('Trump')) 
> ["Donald Trump is US president-elect in 'America's Brexit' as Hillary Clinton concedes election - live", 'Donald Trump ', 'Donald Trump wins presidential election, plunging US into uncertain future'... ] 

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

b.body.findAll(text=re.compile('Trump wins .+? uncertain future')) 
> ['Donald Trump wins presidential election, plunging US into uncertain future'] 
+0

Я хочу захватить следующий элемент. Я уже захватил элемент Trump, я просто хочу захватить следующий. –

+0

Я думаю, что вы ищете '.next_sibling' или' .next_element': https://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-back-and-forth – benjaminjosephw

+0

Это сработало (протестировано на другой сайт, так как URL-адреса google меняются), можете ли вы изменить свой ответ на это, чтобы я мог принять? –