Вопрос по поводу селекторов XPath (для Scrapy) - PullRequest
2 голосов
/ 09 июня 2019

Цель: очистка текстовых данных от класса div list_area daily_all.

Используя scrapy shell , я сначала «очистил» веб-сайт, с которого я хочу очистить данные: https://comic.naver.com/webtoon/weekday.nhn

Используя скрипт 'scrapy shell': scrapy shell 'https://comic.naver.com/webtoon/weekday.nhn'

И используя xpath, я хочу очистить все текстовые данные из класса div "list_area daily_all":

response.xpath("//div[@id='wrap']/div[@id='container']/div[@class='list_area daily_all']/text()")

Однако приведенный выше код ничего не возвращает.Что я делаю не так?

1 Ответ

1 голос
/ 09 июня 2019

Поскольку div[@id='container'] и div[@class='list_area daily_all'] не являются родительскими и дочерними, вы не получите объект.

Добавьте еще одну косую черту, и у вас все получится:

In [1]: response.xpath("//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']")
Out[1]: [<Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']" data=u'<div class="list_area daily_all">\r\n     '>]

То же самое для текста. Вы выбираете очень большой блок, и в нем много тегов и текста. Вы можете выбрать все тексты, как здесь:

In [2]: response.xpath("//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()")
Out[2]: 
[<Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()" data=u'\r\n                \r\n\t\t\t\t'>,
 <Selector xpath="//div[@id='wrap']/div[@id='container']//div[@class='list_area daily_all']//text()" data=u'\r\n\t\t\t\t\t'>,
...

Или, точнее, в вашем селекторе.

...