#python #web-scraping #beautifulsoup
#python #очистка веб-страниц #beautifulsoup
Вопрос:
Привет, я пытаюсь очистить подкатегорию
subcat = soup.find(class_='bread-block-wrap').find(class_='breadcrumb-keyword-bg').find(class_='breadcrumb-keyword list-responsive-container').find(class_='ui-breadcrumb').find('h1')
и это результат
<h1>
<a href="//www.aliexpress.com/category/509/cellphones-telecommunications.html" title="Cellphones amp;amp; Telecommunications"> Cellphones amp;amp; Telecommunications</a>
<span class="divider">amp;></span> <span> Mobile Phones</span>
</h1>
итак, теперь есть 2 тега диапазона, номер 1 равен
<span class="divider">amp;></span>
и 2-й — это
<span> Mobile Phones</span>
и я хочу очистить этот текст в теге 2-го диапазона, пожалуйста, кто-нибудь может помочь
Ответ №1:
Вы можете использовать функцию find_all(), чтобы получить все теги диапазона в списке, а затем использовать .text
атрибут для получения текста.
subcat.find_all('span')[1].text
Должен выводить
Mobile Phones
ДЕМОНСТРАЦИЯ
from bs4 import BeautifulSoup
html="""
<h1>
<a href="//www.aliexpress.com/category/509/cellphones-telecommunications.html" title="Cellphones amp;amp; Telecommunications"> Cellphones amp;amp; Telecommunications</a>
<span class="divider">amp;></span> <span> Mobile Phones</span>
</h1>
"""
soup=BeautifulSoup(html,'html.parser')
h1=soup.find('h1')
print(h1.find_all('span')[1].text.strip())
Вывод
Mobile Phones
Комментарии:
1. Большое спасибо за такой быстрый ответ, можете ли вы помочь мне еще с одной вещью, как мне удалить \ before \xyz.com
2. @MuhammadFaisal Хорошо, теперь я понял ваш вопрос. Вы можете получить правильный URL из href с помощью
subcat.find('a')['href'].replace('//','')
Ответ №2:
Вы можете использовать css-селектор n-го типа
h1 span:nth-of-type(2)
т. е.
items = soup.select("h1 span:nth-of-type(2)")
Затем повторите список.
Если возможно только одно совпадение, тогда просто:
item = soup.select_one("h1 span:nth-of-type(2)")
print(item.text.strip())
Ответ №3:
Другим решением было бы использовать CSS-селекторы, которые позволяют вам избавляться от каскадирования снова и снова. В вашем случае это:
results = soup.select(".bread-block-wrap .breadcrumb-keyword-bg .breadcrumb-keyword.list-responsive-container .ui-breadcrumb h1 span")
собирается вернуть два span
тега в списке. Затем вы можете просто использовать второй.
У вас, конечно, есть множество других полезных инструментов для работы при выборе CSS-селекторов. Просто найдите чит-лист CSS selector и наслаждайтесь.