Я использую скрап для утилизации этот вид продукта .Я хочу отбросить данные как <li>
между <b>
Индикация </b>
и <b>
Контраст-индикации </b>
, а затем следующее <b></b>
для каждого ключевого слова не предсказуемо.
Вот исходный код запрашиваемой страницы.
<article class="col-md-10 col-md-push-1">
<p><b>Caractéristiques des croquettes pour chat Royal Canin Veterinary Diet - Urinary S/O LP 34 :</b>
</p><ul>
<li>struvite.</li>
<li>la vessie.</li>
<li>d'oxalate de calcium.
</li>
<li>maintien de la muqueuse vésicale </li></ul><p></p>
<p><b>Remarques :</b>
</p><ul>
<li> Urinary S/O Feline</li>
<li>chez le chat âgé, rénal avant la prescription de l'Urinary S/O Feline</li></ul><p></p>
<p><b>Indications :</b>
</p><ul>
<li>dissolution des calculs urinaires de struvite</li>
<li>gestion des récidives d’urolithiase à struvite et à oxalate de calcium dans un seul aliment</li></ul><p></p>
<p><b>Contre-indications :</b>
</p><ul>
<li>insuffisance rénale chronique, acidose métabolique</li>
<li>traitement avec des médicaments acidifiant l'urine</li>
<li>lactation, gestation, croissance</li></ul><p></p>
<p><b>Durée du traitement :</b> 5 à 12 semaines sont nécessaires pour obtenir la dissolution des calculs de struvites.<br>
P</p>
</article>
Первый подход : с регулярным выражением, разобрать как свободный текст.Не удалось получить ничего хорошего с этой обычной формулой (<b>[Ii]ndication[s]{0,1}.*?</b>)([\n\r]*.*)(<b>Contre-[Ii]ndication[s]{0,1}.*?</b>)
.Это работало хорошо в тестере , но .re в Python не нашел соответствия.Хорошо, давайте двигаться дальше.
Второй подход : я пытался извлечь с помощью scrapy:
l.add_xpath('contre_indication','//*[@id="description-panel"]/div/article/b[starts-with(text(),"Contre-indications")]/following-sibling::ul/li/text()')
l.add_xpath('contre_indication','//*[@id="description-panel"]/div/article/p/b[starts-with(text(),"Contre-indications")]/following-sibling::ul/li/text()')
l.add_xpath('indication','//*[@id="description-panel"]/div/article/b[starts-with(text(),"Indication")]/following-sibling::ul/li/text()')
l.add_xpath('indication','//*[@id="description-panel"]/div/article/p/b[starts-with(text(),"Indication")]/following-sibling::ul/li/text()')
Иногда ключевое слово xpath - это / b / отдельно, а иногда a / p / b.Это причина, почему существует два xpath для каждого.Здесь, в лучшем случае, у меня есть весь текст между <li>
, но без различия показаний / контр-указаний.
Ожидаемый результат будет:
Indication : ["dissolution des calculs urinaires de struvite","gestion des récidives d’urolithiase à struvite et à oxalate de calcium dans un seul aliment"]
Contre-indication : ["insuffisance rénale chronique, acidose métabolique"..."lactation, gestation, croissance"]
Я очень заинтересован в том, чтобы разобраться в подходе к решению этой проблемы.
С уважением