簡體   English   中英

Python BeautifulSoup 從 SPAN 和 A 標簽中提取文本

[英]Python BeautifulSoup extract text from SPAN and A tags

我想從 SPAN 和 A 標簽中提取文本並放入如下模式的列表中:

['Farina', '500 g']['Uova', '1']['Sale', '100 g']

用 BeautifulSoup 抓取

from bs4 import BeautifulSoup
import re
import string

markup = """
<dd class="ingredient">
    <a href="#">Farina</a>
    <span>500 g</span>
</dd>
<dd class="ingredient">
    <a href="#">Uova</a>
    <span>1</span>
</dd>
<dd class="ingredient">
    <a href="#">Sale</a>
    <span>100 g</span>
</dd>
"""

soup = BeautifulSoup(markup, 'html.parser')

allIngredients = []
for tag in soup.find_all(attrs={'class' : 'ingredient'}):
    #[tag.text for tag in tags]
    link = tag.a.get('href')
    nameIngredient = tag.a.string

    contents = tag.span.text
    quantityIngredient = re.sub(r"\s+", " ", contents).strip()
    allIngredients.append([nameIngredient, quantityIngredient])

print(allIngredients)

有時 SPAN 可以為空或不存在

這是使用lxml (而不是bs4 )的解決方案

from lxml import html

markup = """
<dd class="ingredient">
    <a href="#">Farina</a>
    <span>500 g</span>
</dd>
<dd class="ingredient">
    <a href="#">Uova</a>
    <span>1</span>
</dd>
<dd class="ingredient">
    <a href="#">Sale</a>
    <span>100 g</span>
</dd>
<dd class="ingredient">
    <a href="#">Vino</a>
</dd>
"""

root = html.fromstring(markup)
result = []
for node in root.xpath(".//dd"):
    a = node.xpath(".//a")
    span = node.xpath(".//span")
    result.append((
        a[0].text_content() if a else None, 
        span[0].text_content() if span else None
    ))


print(result)
# [('Farina', '500 g'), ('Uova', '1'), ('Sale', '100 g'), ('Vino', None)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM