2017-02-20 3 views
2

Я пытаюсь получить определенный текст, используя красивый суп, но я не знаю, как получить текст после тега/strong. Я нашел контент, который ищу, но хочу только определенные элементы.Извлечение текстовых узлов для сестер с использованием Beautiful Soup

res = requests.get('http://www.fangraphs.com/statss.aspx?playerid=10155&position=OF') 
res.raise_for_status() 
soup = bs4.BeautifulSoup(res.text, "lxml") 
gamescore = soup.select('#content > table > tr > td > table > tr > td > div') 

Выход: Дата рождения: 8/7/1991 (25 г, 6 м, 12 г) Летучие/Выдает: Р/Р

Можно ли получить только дату рождения и R/R из этого?

ответ

3

Вы можете выбрать элементы <strong> на основе их текста, а затем выбрать соседние узлы-братья, используя next_sibling property.

birthday = soup.find('strong', text='Birthdate:').next_sibling.strip() 
gamescore = soup.find('strong', text='Bats/Throws:').next_sibling.strip() 

Выход:

> print(birthday, gamescore) 
> 8/7/1991 (25 y, 6 m, 12 d) R/R 

Если вы хотите, чтобы выбрать каждый из <strong> элементов и их ближайших родственных узлов, то вы можете использовать следующее:

elements = soup.select('#content > table table div > strong') 

for element in elements: 
    print(element.text, element.next_sibling) 

Выход :

> Birthdate: 8/7/1991 (25 y, 6 m, 12 d)      
> Bats/Throws: R/R      
> Height/Weight: 6-1/235      
> Position: OF 
> Contract: 
+0

Это было идеально. благодаря –