BeatifulSoup - Попытка получить текст внутри тега span - PullRequest
0 голосов
/ 30 октября 2018

Я хочу получить текст внутри тегов span, но когда я пытаюсь использовать .text или get_text (), я получаю ошибки (либо после печати span, либо в цикле for). Что мне не хватает? Я только что установил его, чтобы просто сделать это для первого div класса col, просто чтобы проверить, работает ли он, но я хочу, чтобы он работал и для второго.

Спасибо

Мой код -

premier_soup1 = player_soup.find('div', {'class': 'row-table details -bp30'})
premier_soup_tr = premier_soup1.find_all('div', {'class': 'col'})
for x in premier_soup_tr[0]:
    spans = x.find('span')
    print (spans)

выход

-1
<span itemprop="name">Alisson Ramses Becker</span>
-1
<span itemprop="birthDate">02/10/1992</span>
-1
<span itemprop="nationality"> Brazil</span>
-1
>>> 

HTML

<div class="col">
 <p>Name: <strong><span itemprop="name">Alisson Ramses Becker</span>    </strong></p>  
 <p>Date of birth:<span itemprop="birthDate">02/10/1992</span></p>
 <p>Place of birth:<span itemprop="nationality"> Brazil</span></p>               
  </div>      
 <div class="col">
<p>Club: <span itemprop="affiliation">Liverpool</span></p>
<p>Squad: 13</p><p>Position: Goal Keeper</p>
</div>

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Ответ Кайла хорош, но чтобы не печатать одно и то же значение несколько раз, как вы сказали, вам нужно немного изменить логику. Сначала вы анализируете и добавляете все найденные совпадения в список, а затем просматриваете список со всеми совпадениями и распечатываете их. Еще одна вещь, которую вам, возможно, придется рассмотреть, это следующая проблема:

<div class=col>
  <div class=col>
    <span/>
  </div>
</div>

Используя список вместо печати сразу, вы можете обрабатывать любые совпадения, идентичные любым существующим записям В приведенном выше примере HTML вы можете увидеть, как диапазон может быть добавлен дважды с тем, как вы находите совпадения в ответе, предложенном Kyle. Все дело в том, чтобы убедиться, что вы создали логику, которая найдет только те совпадения, которые вам нужны. То, как вы это делаете, часто / всегда зависит от того, как отформатирован HTML, но также важно быть креативным! Удачи.

0 голосов
/ 30 октября 2018

Если вы просто хотите, чтобы текст в промежутках вы могли искать специально для отрезков:

soup = BeautifulSoup(html, 'html.parser')
spans = soup.find_all('span')
for span in spans:
    print(span.text)

Если вы хотите найти пролеты с определенными элементами, то вы можете сделать:

divs = soup.find_all( 'div', {'class': 'col'})
for div in divs:
    spans = div.find_all('span')
    for span in spans:
        print(span.text)

Если вам нужны все значения после двоеточий, вы можете искать теги абзаца:

soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all( 'div', {'class': 'col'})
for div in divs:
    ps = div.find_all('p')
    for p in ps:
        print(p.text.split(":")[1].strip())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...