2016-11-09 16 views
2

Ich versuche, die Wahl Wahlstimmen zu ziehen, um zu überprüfen, wenn es aktualisiert. Aber der schwierige Teil ist, dass sich alle Klassen bei jeder Aktualisierung ändern. Ich möchte nach dem Text Trump suchen und dann das nächste Element finden, das die Zählung ist.Schöne Suppe Grabbing nächsten Element

kann ich das Element finden, durch die Zeichenfolge gesucht 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 

ich das Trump Element gefunden, mit lm = soup.find(text='Trump'), aber ich weiß nicht, wie nach, dass man das nächste Element greifen.

Antwort

3

Ihr aktueller Code sucht nach einer genauen Übereinstimmung eines Knotens mit diesem Text. Versuchen Sie Folgendes:

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'... ] 

Sie suchen stattdessen nach einem regulären Ausdruck, der den Zieltext enthält. Sie können den gesuchten regulären Ausdruck verfeinern, zum Beispiel:

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

Ich möchte das nächste Element greifen. Ich habe mir schon das Trump-Element geschnappt, ich möchte einfach das nächste überholen. –

+0

Ich glaube, du suchst nach '.next_sibling' oder' .next_element': https://www.crummy.com/software/BeautifulSoup/bs4/doc/#going-back-and-forth – benjaminjosephw

+0

Das hat funktioniert (getestet am eine andere Seite, da die Google-URLs ändern), können Sie Ihre Antwort so ändern, dass ich akzeptieren kann? –