2017-11-22 123 views
5

Vikipedi'de birkaç ülkenin bağımsızlık tarihini yakalamak için bir senaryo yazdım. Kazakistan ile ÖrneğinPython & Beautiful Çorbası: Sadece belirli bir sınıfta arama

:

URL_QS = 'https://en.wikipedia.org/wiki/Kazakhstan' 
r = requests.get(URL_QS) 
soup = BeautifulSoup(r.text, 'lxml') 

# Only keep the infobox (top right) 
infobox = soup.find("table", class_="infobox geography vcard") 

if infobox: 
    formation = infobox.find_next(text = re.compile("Formation")) 

    if formation: 
     independence = formation.find_next(text = re.compile("independence")) 

     if independence: 
      independ_date = independence.find_next("td").text 
     else: 
      independence = formation.find_next(text = re.compile("Independence")) 

      if independence: 
       independ_date = independence.find_next("td").text 


print(independ_date) 

Ve şu çıktıyı var:

Almaty 

Bu çıkış metninde, infobox'unda ama sonra lokalize değildir. "formation.find_next (text = re.compile (" independence "))", bilgi kutusunun dışında bir şey bulduğundan dolayı, neden araştırmanın yalnızca bilgi kutusunda yapılmaması gerektiğini anlamıyorum. Bu alanda nasıl arama yapabilirim?

Yardımlarınız için şimdiden teşekkür ederiz!

+0

oluşumu = infobox.find_next (text = re.compile ("Formasyon")) Bu çizgiyi teyit edebilir . – kmcodes

cevap

1

"formation.find_next (text = re.compile (" bağımsızlık "))" sadece infobox geography vcard öğesinin içinde arama yapmak için soup.find() için .extract() eklemek

infobox'unda dışında bir şey buldum da ondan. Yazdırmadan eğer değişken oluşumu için bir değer "Formation" döndürmesi nedeniyle

infobox = soup.find("table", class_="infobox geography vcard").extract()

0
Bazı ülkelerde test olarak ikinci, aynı zamanda, "Formation" dize nedenle ben baştan "Independence" arama yapabilirsiniz düşünmek, iyi genelleme değil olmalıdır Kodunuz ilk "independence" kelimeden sonra değeri aramak oldu

:

infobox = soup.find("table", class_="infobox geography vcard") 

if infobox: 
    formation = infobox.find_next(text = re.compile("Independence")) 

    if formation: 
     independence = formation.find_next(text = re.compile("independence")) 

     if independence: 
      independence = infobox.find_next(text = re.compile("Independence")) 
      independ_date = independence.find_next("td").text 

print(independ_date) 

Bu

bağımsızlık tarihi ile herhangi bir ülke için wikipedia sayfası bağımsızlığı bölümündeki ilk tarih dönecektir.

İlgili konular