我正在使用Python请求模块来抓取电子商务网站。 我在多个节点之间提取文本时遇到了一些问题。以下html是我尝试提取文本的部分。我需要提取嵌入到两个(p)标签和所有(强)标签中的(div class =" rte成分")下的所有文本。请注意! (强)标签可能因页面而异。
<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>
好吧,我使用下面的代码,但我得到的结果是部分的。
ingredients = parser.xpath('//*[@id="bottom_right_product_infos"]/section[2]/div/p[1]/text()')
print ingredients
['Farina sbiancata arricchita (farina sbiancata di']
相反,我需要提取(DIV)标签下的所有文字。
有人可以帮我这个吗?谢谢!
答案 0 :(得分:1)
您似乎正在使用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.
答案 1 :(得分:0)
纯XML / XPath解决方案是更改XPath以直接选择目标div
的{{3}}:
string(/path/to/div)
这样,您的XPath应该可以移植到任何符合条件的XPath库(并且您可以最大限度地减少记住非标准,特殊访问函数(如text_content()
)的需要。