Я пытаюсь очистить HTML-страницу, которая использует эту структуру:
<div class="article-body">
<div id="firstBodyDiv">
<p class="ng-scope">
This is a dummy text for explanation purposes
</p>
<p> class="ng-scope">
This is a <a>dummy</a> text for explanation purposes
</p>
</div>
</div>
Как вы можете видеть, некоторые из элементов P имеют элементы, а некоторые - нет.
Что я сделал до сих пор, так это:
economics["article_content"] = response.css("div.article-body div#firstBodyDiv > p:nth-child(n+1)::text").extract()
но возвращает только текст до и после элемента a
, если внутри элемента p
есть элемент
a
пока этот запрос возвращает a(s)
элементов:
response.css("div.article-body div#firstBodyDiv p:nth-child(n+1) a::text").extract()
Я хочу найти способ проверить, есть ли элемент a
или нет, поэтому я могу выполнить другой запрос (тот, который очищает текст внутри элемента a
)
это то, что я сделал до сих пор, чтобы сделать это:
for i in response.css("div.article-body div#firstBodyDiv p:nth-child(n+1)"):
if response.css("div.article-body div#firstBodyDiv p:nth-child(n+1) a") in i :
# ofcourse this isnt working since and i am getting this error
# 'in <string>' requires string as left operand, not SelectorList
# probably i will have a different list1, list1.append() the p
# before, a, and the p text after the a element
# assign that list to economics["article_content"]
Хотя я использую селекторы CSS, вы можете использовать селекторы xpath.