Соскоб соскоб с веб-страниц - PullRequest
0 голосов
/ 10 мая 2018

Создавая паука с помощью Scrapy, я столкнулся с чем-то, что мне, кажется, не удалось преодолеть.

for quote in response.css('div.entry-content'):
        yield {
             'title': quote.css('h3.widget-title::text').extract_first(),
             'text': quote.css('div p::text').extract_first(),

Это то, что я хочу извлечь, поэтому получаю p и title от div.panel-layout, но как только p достигает strong или что-то внутри, сказанное p, соскоб заканчивается на этой странице.

Дать (текст) пример будет

The class **LocalTime**

, после чего паук заканчивает действие после встречи с LocalTime как strong.

Я пытался добавить p::text strong::text, но, похоже, не могу обойти это. Как бы мне обойти эту проблему, советы и подсказки более чем приветствуются.

Edit1: я частично решил проблему, удалив ::text из p::text, но теперь он дает мне код для всего, что внутри него, следующим образом <p> The class <strong>LocalTime</strong> ... </p>

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы можете использовать что-то вроде этого (функция XPath string()):

for quote in response.xpath('//div[@class="entry-content"]'):
        yield {
             'title': quote.xpath('./h3[@class="widget-title"]/text()').extract_first(),
             'text': quote.xpath('string(./div/p)').extract_first(),
}
0 голосов
/ 10 мая 2018

Не знаю, правильно ли я вас понимаю.Вы хотите очистить тег 'p' без тега 'strong'?Если это так, это невозможно - вы должны использовать регулярное выражение, чтобы удалить его.Как это:

   re.findall(r'>(.+?)<', "<p> The class <strong>LocalTime</strong> ... </p>")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...