2016-10-20 3 views
0

Я пытаюсь ползать www.tvtropes.org с помощью Scrapy, например:Ограничение Scrapy для разбора одного тега

Belle - TV Tropes

Я вызова оболочки попробовать скрип, используя выше и затем получить соответствующий раздел страницы, выбрав тег div, который имеет атрибут itemprop = "articleBody". Все это прекрасно работает.

scrapy shell "http://tvtropes.org/pmwiki/pmwiki.php/Film/Belle" 
itembody = response.xpath('//div[@itemprop="articleBody"]') 

Я хочу, чтобы затем извлечь все invidual элементы списка в этом теге, будучи в списке тропов, перечисленных для этого фильма. Я думал, что я мог бы сделать это с помощью:

itembody.xpath('//li') 

Однако, это дает мне огромный список тегов «LI», в том числе много из других частей страницы, которые не находятся в пределах «сНу» тега, который я выбрал. Если я хочу, чтобы ограничить его в этом теге я должен заново сформулировать критерий тегов снова следующим образом:

itembody.xpath('//div[@itemprop="articleBody"]//li') 

Я могу сделать это, как обходной путь, но я думал, что itembody будет содержать только те теги, а не остальной части страницы, поэтому я смущен. Кто-нибудь может мне это объяснить?

Заранее спасибо.

ответ

0

Попробуйте Xpath:

//div[@itemprop='articleBody']/ul/li 

С '/' вы получаете элементы, которые являются "первыми детьми" элемента.

С «//» вы получаете элементы, которые также являются дочерними элементами детей.

1

ОК, я обещаю, что искал и искал, прежде чем задавать этот вопрос, но, конечно, я нашел ответ примерно через 5 минут после публикации.

Мне нужно сделать последующий xpath относительной, а не абсолютной ссылкой, т.е.

itembody.xpath('.//li') 

«.» в начале xpath заставляет его смотреть только в текущем элементе, тогда как начало с '/' похоже на назначение корня в качестве отправной точки. Также как ссылка на каталог.

Надеюсь, это поможет кому-то еще.

Смежные вопросы