Как преобразовать селектор CSS в XPath в Scrapy? - PullRequest
0 голосов
/ 23 января 2019

Я хочу преобразовать селектор CSS в XPath в проекте Scrapy.

Я изучаю Scrapy из учебника на его веб-сайте, и у меня возникают проблемы с переводом непосредственно с языка CSS на XPath.

Селектор CSS, используемый для анализа http://quotes.toscrape.com/:

`>>> for quote in response.css("div.quote"):
...     text = quote.css("span.text::text").extract_first()
...     author = quote.css("small.author::text").extract_first()
...     tags = quote.css("div.tags a.tag::text").extract()
...     print(dict(text=text, author=author, tags=tags))`

Я пытался писать с использованием XPath как:

In [83]: for quote in response.xpath('//div[@class="quote"]'):
    ...:     text =    quote.xpath('//span[@class="text"]/text()').extract_first()
    ...:     author = quote.xpath('//small[@class="author"]/text()').extract_first()
    ...:     tags= quote.xpath('//div[@class="tags"]/a[@class="tag"]/text()').extract()
    ...:     print(dict(text=text,author=author,tags=tags))`

В CSSpath Я получаю информацию о различных кавычках, в то время как в XPath я получаю одну и ту же кавычку несколько раз в списке.Что я делаю не так?

1 Ответ

0 голосов
/ 23 января 2019

"В пути CSS я получаю информацию о разных кавычках, а в XPath я получаю одну и ту же кавычку несколько раз в списке. Что я делаю не так?"

Основная проблема связана с тем, что XPath интерпретирует / в начале выражения как ссылку на корневой документ, не имеет значения элемент контекста, в котором выполняется выражение. Вы хотите явно указать, что хотите выполнить выражение для текущего элемента контекста (на который ссылается переменная quote), добавив . в начале, например:

text = quote.xpath('.//span[@class="text"]/text()').extract_first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...