2017-11-23 13 views
0

그래서 위키 피 디아 페이지에서 특정 위치의 영역을 긁어 냄으로써 해당 영역을 얻으려고합니다. 예를 들어 Cumbria를 사용하면 (https://en.wikipedia.org/wiki/Cumbria) 정보 상자를 얻을 수 있습니다.태그가 아닌 텍스트로 아름다운 수프에있는 아이템 찾기

url = 'https://en.wikipedia.org/wiki/Cumbria' 
r = requests.get(url) 
soup = BeautifulSoup(r.content, 'lxml') 
value = soup.find('table', {"class": "infobox geography vcard"}) \ 
      .find('tr', {"class":"mergedrow"}).text 

은 그러나 infobox geography vcard 다수에게 <tr class='mergerow'> 서브 세트를 가지며, 각 내 <th scope='row'>이다. 내가 원하는

<th scope='row'><th scope="row">Area</th> 내가 대신 태그 '지역'을 검색하여 <th scope="row">Area</th>의 부분 집합의 텍스트를 얻을 수 있다면 다른 모든이 infobox geography vcard

답변

1

당신이 할 수있는 아래 유비쿼터스 같이 궁금 해서요 모든 thscope=row으로 직접 검색하십시오. 그런 다음 반복하여 어떤 문자가 Area인지 확인하고 find_next_sibling을 사용하여 다음 형제를 가져옵니다 (필요한 데이터가있는 td).

이 표에는 '의식 군'과 '비 수도권 군'에 대한 항목이 2 개씩 있습니다.

ths = soup.find_all('th', {'scope': 'row'}) 

for th in ths: 
    if th.text == 'Area': 
     area = th.find_next_sibling().text 
     print(area) 

# 6,768 km2 (2,613 sq mi) 
# 6,768 km2 (2,613 sq mi) 
+0

감사합니다. find_next_sibling에 대해 알지 못했습니다. 굉장히 유용하다! –