📜  scrapy 获取文本自定义标签 - Python (1)

📅  最后修改于: 2023-12-03 15:05:06.019000             🧑  作者: Mango

Scrapy 获取文本自定义标签

在使用 Scrapy 爬虫时,我们通常会获取 HTML 标签中的文本信息,但有些网站会使用自定义的标签,比如 <event><title>,这些标签在 HTML 中并不常见。所以在 Scrapy 中,我们需要对这些自定义标签进行特殊处理。

自定义标签处理

在 Scrapy 中,我们可以使用 response.xpath() 方法来定位 HTML 标签。但是对于自定义标签,我们需要使用自定义的处理器来将其转换为有效的 XPath 表达式。

例如,假设我们要获取以下 HTML 中的自定义标签:

<html>
  <body>
    <event>
      <title>Event Name</title>
      <location>Event Location</location>
      <date>Event Date</date>
    </event>
  </body>
</html>

我们可以在 Scrapy 中使用以下代码来获取自定义标签:

response.xpath('//event/title/text()').get()

这段代码将返回 "Event Name"。

定义自定义标签

有时候,一个网站会使用大量的自定义标签来表示不同的信息。如果我们想要重复使用这些自定义标签,我们可以在 Scrapy 中定义自定义标签。

例如,假设我们要定义一个 <product> 标签,包含以下信息:

<product>
  <name>Product Name</name>
  <price>100.0</price>
  <description>Product Description</description>
</product>

我们可以在 Scrapy 中定义一个自定义标签处理器,将其转换为有效的 XPath 表达式:

from scrapy.selector import Selector

class ProductSelector(Selector):
    def product(self):
        return self.xpath('//product')

    def name(self):
        return self.xpath('//product/name/text()').get()

    def price(self):
        return self.xpath('//product/price/text()').get()

    def description(self):
        return self.xpath('//product/description/text()').get()

这样我们就可以使用以下代码来获取 <product> 中的文本信息:

product = response.product()
name = product.name()
price = product.price()
description = product.description()
总结

在 Scrapy 中获取自定义标签需要特殊处理,我们可以将其转换为有效的 XPath 表达式,或者定义自定义标签处理器来重复使用这些自定义标签。