Issue
I am a bit of an amateur using BeautifulSoup
. After running soup.find_all('ul',class_='tags tags--project')
in my object of interest I obtain the following output:
<ul class="tags tags--project">
<li><a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bcategory_id%5D%5B%5D=80" title="Filtrer les résultats de la catégorie : Nature en ville"><span class="show-for-sr">Filtrer les résultats de la catégorie : Nature en ville</span><span aria-hidden="true">Nature en ville</span></a></li>
<li><a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bscope_id%5D%5B%5D=71" title="Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux"><span class="show-for-sr">Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux</span><span aria-hidden="true">4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux</span></a></li>
</ul>, <ul class="tags tags--project">
<li><a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bcategory_id%5D%5B%5D=80" title="Filtrer les résultats de la catégorie : Nature en ville"><span class="show-for-sr">Filtrer les résultats de la catégorie : Nature en ville</span><span aria-hidden="true">Nature en ville</span></a></li>
<li><a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bscope_id%5D%5B%5D=66" title="Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie"><span class="show-for-sr">Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie</span><span aria-hidden="true">2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie</span></a></li>
</ul>,........
I am interested in extracting the objects that come after title="...."
but I am not sure what is the most efficient way to do so. Since they are inside <li>
I tried something like soup.find_all('ul',class_='tags tags--project').find_all('li')
but that does not work. Do you have any suggestions?
PS: As you can see from the example above, normally inside each ul
you have four title="...."
but the second two are just repetitions of technically I just need to keep the first two.
Solution
If I understand you correctly you want to get text from the different <span>
s under <ul>
:
from bs4 import BeautifulSoup
html_doc = """\
<ul class="tags tags--project">
<li>
<a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bcategory_id%5D%5B%5D=80" title="Filtrer les résultats de la catégorie : Nature en ville">
<span class="show-for-sr">Filtrer les résultats de la catégorie : Nature en ville</span>
<span aria-hidden="true">Nature en ville</span>
</a>
</li>
<li>
<a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bscope_id%5D%5B%5D=71" title="Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux">
<span class="show-for-sr">Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux</span>
<span aria-hidden="true">4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux</span>
</a>
</li>
</ul>
<ul class="tags tags--project">
<li>
<a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bcategory_id%5D%5B%5D=80" title="Filtrer les résultats de la catégorie : Nature en ville">
<span class="show-for-sr">Filtrer les résultats de la catégorie : Nature en ville</span>
<span aria-hidden="true">Nature en ville</span>
</a>
</li>
<li>
<a href="/processes/mes-idees-pour-mon-quartier/f/472/budgets/3/projects?filter%5Bscope_id%5D%5B%5D=66" title="Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie">
<span class="show-for-sr">Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie</span>
<span aria-hidden="true">2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie</span>
</a>
</li>
</ul>"""
soup = BeautifulSoup(html_doc, "html.parser")
for ul in soup.select("ul.tags.tags--project"):
for span in ul.select("span"):
print(span.text)
print("-" * 80)
Prints:
Filtrer les résultats de la catégorie : Nature en ville
Nature en ville
Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux
4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux
--------------------------------------------------------------------------------
Filtrer les résultats de la catégorie : Nature en ville
Nature en ville
Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie
2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie
--------------------------------------------------------------------------------
If you want every second one, you can use [::2]
:
for ul in soup.select("ul.tags.tags--project"):
for span in ul.select("span")[::2]: # <-- use [::2] here
print(span.text)
print("-" * 80)
Prints:
Filtrer les résultats de la catégorie : Nature en ville
Filtrer les résultats pour le secteur : 4.2 - Jolimont / Soupetard / Roseraie / Gloire / Gramont / Amouroux
--------------------------------------------------------------------------------
Filtrer les résultats de la catégorie : Nature en ville
Filtrer les résultats pour le secteur : 2.4 - Casselardit / Fontaine-Bayonne / Cartoucherie
--------------------------------------------------------------------------------
Answered By - Andrej Kesely
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.