BeautifulSoup .find () захватывает слишком много текста (как его сузить?) - PullRequest
0 голосов
/ 13 октября 2018

интересно, как настроить таргетинг на текст «Switch» на следующем html:

    <div class="product_title">
                <a href="/game/pc/into-the-breach" class="hover_none">
                            <h1>Into the Breach</h1>
                        </a>
                        <span class="platform">
                            <a href="/game/pc">
                                                    PC
                                                </a>
                        </span>
        </div>
<div class="product_data">
    <ul class="summary_details">
                        <li class="summary_detail publisher" >
                <span class="label">Publisher:</span>
                <span class="data">
                                        <a href="/company/subset-games"  >
                                                    Subset Games
                                                </a>
                                    </span>
            </li>
                                    <li class="summary_detail release_data">
                <span class="label">Release Date:</span>
                <span class="data" >Feb 27, 2018</span>
            </li>
                                                                                <li class="summary_detail product_platforms">
                        <span class="label">Also On:</span>
                        <span class="data">
                                    <a href="/game/switch/into-the-breach" class="hover_none">Switch</a>                                                </span>
                    </li>
                                                    </ul>
</div>

, пока я тоже собираю текст «Кроме того:» (с большим количествомпробелов) с этим кодом:

self.playable_on_systems_label.setText(self.html_soup.find("span", class_='platform').text.strip() + ', ' + self.html_soup.find("li", class_='summary_detail product_platforms').text.strip())

как мне захватить (в данном случае) только текст "Switch"?

FYI - для первой половины оператора (захват"ПК") текст работает нормально, но не текст "также включен"

Заранее спасибо,

Ответы [ 2 ]

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

Вы можете использовать функцию BeautifulSoup select() для перемещения по тексту «Переключатель», проверьте этот код !!!

rom bs4 import BeautifulSoup

html = '''<div class="product_title">
<a class="hover_none" href="/game/pc/into-the-breach">
<h1>Into the Breach</h1>
</a>
<span class="platform">
<a href="/game/pc">
                                                    PC
                                                </a>
</span>
</div>
<div class="product_data">
<ul class="summary_details">
<li class="summary_detail publisher">
<span class="label">Publisher:</span>
<span class="data">
<a href="/company/subset-games">
                                                    Subset Games
                                                </a>
</span>
</li>
<li class="summary_detail release_data">
<span class="label">Release Date:</span>
<span class="data">Feb 27, 2018</span>
</li>
<li class="summary_detail product_platforms">
<span class="label">Also On:</span>
<span class="data">
<a class="hover_none" href="/game/switch/into-the-breach">Switch</a> </span>
</li>
</ul>
</div>'''


soup = BeautifulSoup(html, 'html.parser')
text = soup.select('.summary_detail.product_platforms .hover_none')[0].text.strip()
print(text)

Вывод:

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

Ваш запрос получает весь элемент span с class="summary_detail product_platforms", который будет включать весь текст, начиная с «Кроме того:» и до «Переключить».Попробуйте что-то вроде .find('a', href=re.compile("^.+switch.+$")) или поочередно (используя CSS) .select("a[href*=switch]") (решение здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...