Анализ комментариев с помощью SoupStrainer

#python #web-scraping #beautifulsoup

Вопрос:

Как вы можете использовать SoupStrainer для анализа комментариев?

Я знаю, как использовать BeautifulSoup для анализа комментариев, но я хотел бы сделать это с помощью SoupStrainer, чтобы ускорить мой код. Возможно ли это?

Пример:

 from bs4 import BeautifulSoup,Comment
import requests

txt = requests.get('https://www.basketball-reference.com/boxscores/202012220BRK.html').text

sp = BeautifulSoup(txt,'lxml')
comment = sp.find(text=lambda text:isinstance(text, Comment) 
                 and 'line_score' in text)
 

Это работает так, как задумано. Но я хотел бы добавить parse_only аргумент, чтобы BeautifulSoup() с самого начала анализировать только комментарии.

Личные Попытки

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

 ss = SoupStrainer(text=lambda text:isinstance(text, Comment))
sp = BeautifulSoup(txt,'lxml',parse_only=ss)
print(sp)
 
 <!DOCTYPE html>
 

К сожалению, это явно не сработало.

Я также попытался передать строковый аргумент:

 ss = SoupStrainer("comment")
sp = BeautifulSoup(txt,'lxml',parse_only=ss)
print(sp)
 
 <!DOCTYPE html>
 

Тоже не повезло.

Комментарии:

1. Привет @Machetes0602 Добро пожаловать в SO! можете ли вы указать любой код и URL-ссылку, чтобы это было легко понять!

Ответ №1:

SoupStrainer работает, указывая элементы, подлежащие анализу, в объекте BeautifulSoup. Либо это комментарий, либо любые другие части веб-страницы, на которые вы можете указать напрямую с помощью чего-то вроде xpath или css-селектора. Это помогает определить необходимые теги, которые следует сохранить и опустить. Тогда мы сможем разобрать только необходимые части/теги с помощью BeautifulSoup.

Вы можете найти эту ссылку полезной, чтобы начать работу с SoupStrainer.