Как раздеть струну до «разыгрывающего» - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь очистить позицию этой веб-страницы с помощью BeautifulSoup. Вот мой соответствующий код.

info_panel = soup.find("div",{"id":"meta"})
info_panel_rows = info_panel.find_all("p")
if(info_panel_rows[2].find("strong") != None):
        position = info_panel_rows[2].find("strong").next_sibling
        position = str(position).strip()
else: # Executing on this path in my current problem
        position = info_panel_rows[3].find("strong").next_sibling 
        position = str(position).strip()
print(position)

Когда я очищаю его, он печатается примерно так:

Small Forward



  ▪

Как бы мне go было бы урезать это до "Маленького форварда" «? Я просмотрел все переполнения стека и не смог найти четкого ответа.

Спасибо за любую помощь, которую вы можете оказать!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Если вы закодируете его в ascii, игнорируя ошибки, то при вызове strip () вы получите желаемый вывод.

import requests
from bs4 import BeautifulSoup

html = requests.get('https://www.basketball-reference.com/players/y/youngtr01.html').text
soup = BeautifulSoup(html, 'html.parser')
info_panel = soup.find("div", {"id": "meta"})
info_panel_rows = info_panel.find_all("p")
if info_panel_rows[2].find("strong") is not None:
    position = info_panel_rows[2].find("strong").next_sibling
else:
    position = info_panel_rows[3].find("strong").next_sibling
print(position.encode('ascii', 'ignore').strip())

Выходы:

Point Guard

Кодирование в ascii избавляет от маркера точка.

Или, если вы просто хотите напечатать вторую строку:

print(position.splitlines()[1].strip())

Также выводит:

Point Guard
0 голосов
/ 11 апреля 2020

У вас проблемы с переводом строки и табуляции в позицию? если так, сделайте

position = str(position).strip('\n\t ')

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

Если это не решит вашу проблему, Вы можете попробовать регулярное выражение

import re 
string_patterns = re.compile(r'\b[0-9a-zA-Z]*\b')
position = info_panel_rows[3].find("strong").next_sibling
results = string_patterns.findall(str(position))
results = ' '.join([item for item in results if len(item)])
print(results)

Надеюсь, это поможет

...