Xpath提取多个节点之间的所有文本?

2024-04-19 15:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python请求模块抓取一个电子商务网站。 我在提取多个节点之间的文本时遇到了一些问题。下面的html是我试图提取文本的部分。我需要提取(div^{cl1}下的所有文本$

<div class="rte ingredients">
    <p>Farina sbiancata arricchita (farina sbiancata di 
    <strong>grano</strong>, 
    ferro ridotto, vitamine B3-B1-B2-B9), zucchero, 
    agenti lievitanti E500ii-E541i-E341i, destrosio, 
    <strong>latte</strong> 
    scremato disidratato, olio di 
    <strong>soia</strong> parzialmente 
    idrogenato, sale, 
    <strong>glutine</strong> di <strong>grano</strong>, 
    colorante E170, estratto secco di sciroppo di granoturco, caseinati di 
    sodio (<strong>latte</strong>), emulsionante E471, regolatore di acidità 
    E270. Può contenere tracce di <strong>uova</strong>. Contiene OGM.</p>

    <p>Valori nutrizionali (per 100g): energia 348Kcal, lipidi 3.3g (di cui 
    grassi saturi 0g), carboidrati 69.6g (di cui zuccheri 13g), proteine 
    10.9g, sale 2.6g.</p>
</div>

我使用下面的代码,但是得到的结果是部分的。在

^{pr2}$

相反,我需要提取(DIV)标记下的所有文本。在

有人能帮我吗?谢谢!在


Tags: 模块文本div节点网站htmlsale电子商务
2条回答

纯XML/XPath解决方案是将XPath更改为直接选择目标divstring value

string(/path/to/div)

这样,您的XPath应该可以移植到任何兼容的XPath库中(并且您可以将记住非标准的、特殊的访问函数(如text_content())的需求降到最低。在

您似乎正在使用lxml库。如果是这样,下面的方法应该获取完整的内容。在print语句中使用.text_content(),而不是.text。在

content='''
<div class="rte ingredients">
    <p>Farina sbiancata arricchita (farina sbiancata di 
    <strong>grano</strong>, 
    ferro ridotto, vitamine B3-B1-B2-B9), zucchero, 
    agenti lievitanti E500ii-E541i-E341i, destrosio, 
    <strong>latte</strong> 
    scremato disidratato, olio di 
    <strong>soia</strong> parzialmente 
    idrogenato, sale, 
    <strong>glutine</strong> di <strong>grano</strong>, 
    colorante E170, estratto secco di sciroppo di granoturco, caseinati di 
    sodio (<strong>latte</strong>), emulsionante E471, regolatore di acidità 
    E270. Può contenere tracce di <strong>uova</strong>. Contiene OGM.</p>

    <p>Valori nutrizionali (per 100g): energia 348Kcal, lipidi 3.3g (di cui 
    grassi saturi 0g), carboidrati 69.6g (di cui zuccheri 13g), proteine 
    10.9g, sale 2.6g.</p>
</div>
'''
from lxml.html import fromstring
root = fromstring(content)
for items in root.xpath("//div[contains(@class,'ingredients')]/p"):
    print(items.text_content())  #take a closer look at this .text_content() instead of .text.

相关问题 更多 >