Получение основного текстового содержимого тега HTML без внутри <span> - PullRequest
1 голос
/ 19 апреля 2020

Я создаю Python веб-скребок, который просматривает страницу результатов поиска eBay (в данном случае «Игровые ноутбуки») и собирает название каждого предмета для продажи. Я использую BeautifulSoup, чтобы сначала получить тег h1, в котором хранится каждый заголовок, а затем распечатать его в виде текста:

    for item_name in soup.findAll('h1', {'class': 'it-ttl'}):
    print(item_name.text)

Однако внутри каждого тега h1 с классом it-ttl также является тегом span, который содержит некоторый текст:

<h1 class="it-ttl" itemprop="name" id="itemTitle">
 <span class="g-hdn">Details about  &nbsp;</span>
 Acer - Nitro 5 15.6" Gaming Laptop - Intel Core i5 - 8GB Memory - NVIDIA GeFo…
</h1>

Моя текущая программа распечатывает содержимое тега span AND заголовок элемента: Вывод моей консоли

Может ли кто-нибудь объяснить мне, как получить просто заголовок элемента, игнорируя тег span, содержащий текст «Подробности о»? Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Другое решение.

from simplified_scrapy import SimplifiedDoc,req,utils
html = '''
<h1 class="it-ttl" itemprop="name" id="itemTitle">
 <span class="g-hdn">Details about  &nbsp;</span>
 Acer - Nitro 5 15.6" Gaming Laptop - Intel Core i5 - 8GB Memory - NVIDIA GeFo…
</h1>
'''
doc = SimplifiedDoc(html)
item_names = doc.selects('h1.it-ttl').span.nextText()

print(item_names)

Результат:

['Acer - Nitro 5 15.6" Gaming Laptop - Intel Core i5 - 8GB Memory - NVIDIA GeFo…']

Вот еще несколько примеров. https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

0 голосов
/ 20 апреля 2020

Это можно сделать, просто удалив оскорбительные <span>:

item = """
<h1 class="it-ttl" itemprop="name" id="itemTitle">
 <span class="g-hdn">Details about  &nbsp;</span>
 Acer - Nitro 5 15.6" Gaming Laptop - Intel Core i5 - 8GB Memory - NVIDIA GeFo…
</h1>
"""
from bs4 import BeautifulSoup as bs
soup = bs(item,'lxml')
target = soup.select_one('h1')
target.select_one('span').decompose()
print(target.text.strip())

Вывод:

Acer - Nitro 5 15.6" Gaming Laptop - Intel Core i5 - 8GB Memory - NVIDIA GeFo…
...