Используйте beautifulsoup для анализа строки из text_I_want

#python #html #parsing #beautifulsoup #python-requests

Вопрос:

Я пытаюсь разобрать строку в следующем формате:

 <span class="foobar">text_I_want</span>
 

Как я могу получить доступ только к «text_I_want»?

Возможно, был более ранний шаг, который я должен был предпринять при анализе с помощью bs. Первоначально у меня было следующее:

 <div class="commit_item">
<span class="commit_id"><a href="/commit/944bd962177fd1444b2e6282ec808402bb9e3fa6/">944bd962177f</a></span>
<span class="commit_summary">
<span class="commit_subject">mm/memory-failure: make sure wait for page writeback in memory_failure</span>
<span class="commit_date">2021-08-02</span>
<span class="commit_author">Rafael Aquini</span>
</span>
<span class="commit_link">
<a class="tree_link" href="/commit/e8675d291ac007e1c636870db880f837a9ea112a/"><img alt="" class="tree_icon" src="/static/gitrepo/tux.svg"/> <span class="tree_name">linux</span></a>
</span>
</div>
 

Чтобы проанализировать это, я сделал следующее:

 for commit in soup.find_all('div', {"class": "commit_item"}):
    print(commit)
    url = commit.find('span', {"class": "commit_id"})
    subject = commit.find('span', {"class": "commit_subject"}) 
    author = commit.find('span', {"class": "commit_date"})
    date = commit.find('span', {"class": "commit_author"})
    commit_link = commit.find('span', {"class": "commit_link"})
 

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

Ответ №1:

 from bs4 import BeautifulSoup
from pprint import pp

html = '''<div class="commit_item">
<span class="commit_id"><a href="/commit/944bd962177fd1444b2e6282ec808402bb9e3fa6/">944bd962177f</a></span>
<span class="commit_summary">
<span class="commit_subject">mm/memory-failure: make sure wait for page writeback in memory_failure</span>
<span class="commit_date">2021-08-02</span>
<span class="commit_author">Rafael Aquini</span>
</span>
<span class="commit_link">
<a class="tree_link" href="/commit/e8675d291ac007e1c636870db880f837a9ea112a/"><img alt="" class="tree_icon" src="/static/gitrepo/tux.svg"/> <span class="tree_name">linux</span></a>
</span>
</div>
'''

soup = BeautifulSoup(html, 'lxml')

goal = soup.select_one('.commit_item')
data = list(goal.stripped_strings)
goal = {
    'Url': goal.a['href'],
    'Subject': data[1],
    'Author': data[-2],
    'Date': data[-3]
}

pp(goal)