scrapy: удалить некоторые элементы span элемент из div с помощью xpath

Я занимаюсь парсингом, и у меня есть некоторые элементы, которые я хочу исключить. Например, из основного div id = "Introduction" я хочу очистить только h2 и 2 абзаца и исключить span class = "section_edit_link" и div class = "photo_container". Я, конечно, могу извлечь нужные мне элементы и присоединиться к ним, но поскольку в каждом разделе есть эти 2 элемента, которые я хочу исключить, есть ли способ исключить их из xpath?

<div id="Introduction"><span class="section_edit_link"><a href="/wiki_edit.cfm?title=Seoul&amp;section=Introduction" title="Edit section: Introduction" rel="nofollow">edit</a> </span>
<h2>Introduction</h2>
<div class="photo_container">
    <a href="https://www.travellerspoint.com/photos/stream/photoID/80/features/countries/South Korea/"><img src="https://photos.travellerspoint.com/8818/thumb_dhessel_seoul.jpg" width="200" height="146" alt="Night time traffic in Seoul" class="photo"></a>
    <h4>Night time traffic in Seoul</h4>
    <p>© All Rights Reserved <a href="https://www.travellerspoint.com/users/Hessell/">Hessell</a></p>
</div>
<p><strong>Seoul</strong> (서울) is the heart of <a href="http://www.travellerspoint.com/guide/South_Korea/">South Korea</a>, hosting about a quarter of the country's population of nearly 50 million. Seoul was also the historic capital of Korea from the 14th century until the nation's partition into <a href="http://www.travellerspoint.com/guide/North_Korea/">North</a> and <a href="http://www.travellerspoint.com/guide/South_Korea/">South</a> in 1948. Located just 50 kilometres south of the North Korean border, Seoul symbolises the division of North and South Korea. </p>
<p>Seoul enjoys a lively nightlife, which has earned it comparisons with <a href="http://www.travellerspoint.com/guide/Tokyo/">Tokyo</a>. Thankfully though, Seoul is much cheaper than the <a href="http://www.travellerspoint.com/guide/Japan/">Japanese</a> capital.</p>


person o.ionut    schedule 29.06.2018    source источник
comment
ради всего святого, включите часть своего кода и исходный HTML того, что вы пытаетесь очистить ...   -  person oldboy    schedule 29.06.2018


Ответы (1)


Если ваш блок Introduction содержит только такие элементы, как показано в вопросе выше, то следующий результат должен дать вам желаемый результат:

     yield{
          'heading': response.css('#Introduction > h2').extract_first(),
          'para 1': response.css('#Introduction > p').extract_first(),
          'para 1': response.css('#Introduction > p:last-child').extract_first(),
          }
person Krishna    schedule 29.06.2018
comment
К сожалению, Введение - не единственный раздел, который я хочу очистить. Следующие разделы практически идентичны. По этой причине я попытался найти способ исключить некоторые элементы. Что-то вроде этого, но без использования CSS: stackoverflow.com/a/38286018/10011899 Я также пробовал множество комбинаций без () но ни один из них не кажется действительным. - person o.ionut; 30.06.2018
comment
Это? Если у вас нет ограничений на использование CSS, вы можете попробовать селектор CSS #Introduction h2, h2 ~ p, и это даст вам все h2 и p прямо под основным div. Посмотрим, поможет ли это, и дайте мне знать. - person Krishna; 30.06.2018