- Scrapy 教程
- Scrapy - 首页
- Scrapy 基本概念
- Scrapy - 概述
- Scrapy - 环境
- Scrapy - 命令行工具
- Scrapy - 爬虫 (Spiders)
- Scrapy - 选择器
- Scrapy - 项 (Items)
- Scrapy - 项加载器 (Item Loaders)
- Scrapy - Shell
- Scrapy - 项管道 (Item Pipeline)
- Scrapy - Feed 导出
- Scrapy - 请求 & 响应
- Scrapy - 链接提取器
- Scrapy - 设置
- Scrapy - 异常
- Scrapy 实时项目
- Scrapy - 创建项目
- Scrapy - 定义项
- Scrapy - 第一个爬虫
- Scrapy - 爬取
- Scrapy - 提取项
- Scrapy - 使用项
- Scrapy - 跟踪链接
- Scrapy - 爬取数据
- Scrapy 有用资源
- Scrapy - 快速指南
- Scrapy - 有用资源
- Scrapy - 讨论
Scrapy - XPath 提示
在条件中使用文本节点
当你在 XPath 字符串函数中使用文本节点时,使用.(点)而不是.//text(),因为这会产生称为节点集的文本元素集合。
例如 -
from scrapy import Selector val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')
如果你将节点集转换为字符串,请使用以下格式 -
>>val.xpath('//a//text()').extract()
它将显示元素为 -
[u'More Info',u'click here']
以及
>>val.xpath("string('//a[1]//text())").extract()
它将结果显示为 -
[u'More Info']
//node[1] 和 (//node)[1] 的区别
//node[1]显示在各自父级下定义的所有第一个元素。(//node)[1]仅显示文档中的第一个元素。
例如 -
from scrapy import Selector val = Selector(text = """ <ul class = "list"> <li>one</li> <li>one</li> <li>one</li> </ul> <ul class = "list"> <li>four</li> <li>five</li> <li>six</li> </ul>""") res = lambda x: val.xpath(x).extract()
以下行显示在各自父级下定义的所有第一个li元素 -
>>res("//li[1]")
它将显示结果为 -
[u'<li>one</li>', u'<li>four</li>']
你可以获取显示如下所示的完整文档的第一个li元素 -
>>res("(//li)[1]")
它将显示结果为 -
[u'<li>one</li>']
你还可以显示在ul父级下定义的所有第一个li元素 -
>>res("//ul//li[1]")
它将显示结果为 -
[u'<li>one</li>', u'<li>four</li>']
你可以获取显示如下所示的整个文档中在ul父级下定义的第一个li元素 -
>>res("(//ul//li)[1]")
它将显示结果为 -
[u'<li>one</li>']
内置选择器参考
内置选择器包括以下类 -
class scrapy.selector.Selector(response = None, text = None, type = None)
上述类包含以下参数 -
response - 它是一个 HTMLResponse 和 XMLResponse,用于选择和提取数据。
text - 当没有可用响应时,它使用 UTF-8 字符编码对所有字符进行编码。
type - 它指定不同的选择器类型,例如 html 用于 HTML 响应,xml 用于 XMLResponse 类型,none 用于默认类型。它根据响应类型选择类型,或者如果与 text 一起使用,则默认设置为 html。
内置选择器包含以下方法 -
序号 | 方法 & 描述 |
---|---|
1 | xpath(query) 它根据 xpath 查询匹配节点,并将结果作为 SelectorList 实例提供。参数 query 指定要使用的 XPATH 查询。 |
2 | css(query) 它提供 CSS 选择器并返回 SelectorList 实例。参数 query 指定要使用的 CSS 选择器。 |
3 | extract() 它将所有匹配的节点作为 Unicode 字符串列表提取出来。 |
4 | re(regex) 它提供正则表达式并将匹配的节点作为 Unicode 字符串列表提取出来。参数 regex 可以用作正则表达式或字符串,它使用 re.compile(regex) 方法编译为正则表达式。 |
5 | register_namespace(prefix, uri) 它指定选择器中使用的命名空间。如果没有从非标准命名空间注册命名空间,则无法提取数据。 |
6 | remove_namespaces() 它丢弃命名空间并允许使用无命名空间的 xpath 遍历文档。 |
7 | __nonzero__() 如果选择了内容,则此方法返回 True,否则返回 False。 |
SelectorList 对象
class scrapy.selector.SelectorList
SelectorList 对象包含以下方法 -
序号 | 方法 & 描述 |
---|---|
1 | xpath(query) xpath() |
2 | css(query) css() |
3 | extract() extract() |
4 | re() __nonzero__() |
5 | __nonzero__() 如果列表不为空,则此方法返回 True,否则返回 False。 |
SelectorList 对象包含一些在此 链接 中解释的概念。