Я использую "scrapy", чтобы очистить несколько статей, подобных этим: https://fivethirtyeight.com/features/championships-arent-won-on-paper-but-what-if-they-were/
Я использую следующий код в моем пауке:
def parse_article(self, response):
il = ItemLoader(item=Scrapping538Item(), response=response)
il.add_css('article_text', '.entry-content *::text')
... который работает. Но я бы хотел сделать этот CSS-селектор немного более сложным. Прямо сейчас я извлекаю каждый текстовый отрывок. Но, глядя на статью, там есть таблицы и визуализации, которые также включают текст. Структура HTML выглядит следующим образом:
<div class="entry-content single-post-content">
<p>text I want</p>
<p>text I want</p>
<p>text I want</p>
<section class="viz">
<header class="viz">
<h5 class="title">TITLE-text</h5>
<p class="subtitle">SUB-TITLE-text</p>
</header>
<table class="viz full"">TABLE DATA</table>
</section>
<p>text I want</p>
<p>text I want</p>
</div>
С кодом, приведенным выше, я получаю что-то вроде:
текст, который я хочу
текст, который я хочу
текст, который яхочу
TITLE-текст <<<< (текст, который я не хочу) <br>SUB-TITLE-текст <<<< (текст, который я не хочу) <br>ТАБЛИЦА ДАННЫХ <<<< (текстЯ не хочу) <br>текст Я хочу
текст Я хочу
Мои вопросы:
- Как мне изменить функцию
add_css()
втаким образом, что он берет весь текст, кроме текстов из таблицы? - Было бы проще с функцией
add_xpath
? - В целом, что было бы лучшим для этого методом? (извлекать текст в условиях)
Обратная связь будет принята с благодарностью