【问题标题】:How to convert a CSS selector to XPath in Scrapy?如何在 Scrapy 中将 CSS 选择器转换为 XPath?
【发布时间】:2019-01-22 21:10:36
【问题描述】:

我想在 Scrapy 项目中将 CSS 选择器转换为 XPath。

我正在从它的网站教程中学习 Scrapy,但我在将 CSS 语言直接翻译成 XPath 时遇到了麻烦。

用来解析http://quotes.toscrape.com/的CSS选择器是:

`>>> 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))`

在 CSS 路径中,我获得了有关不同引号的信息,而在 XPath 中,我在列表中多次获得相同的引号。我做错了什么?

【问题讨论】:

    标签: css xpath scrapy


    【解决方案1】:

    “在 CSS 路径中,我获得了不同引号的信息,而在 XPath 中,我在列表中多次获得相同的引号。我做错了什么?”

    主要问题是由于 XPath 将表达式开头的 / 解释为对根文档的引用,这与执行表达式的上下文元素无关。您想通过在开头添加. 来明确告诉您要在当前上下文元素(变量quote 引用的那个)上执行表达式,例如:

    text = quote.xpath('.//span[@class="text"]/text()').extract_first()
    

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2012-09-16
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多