xpath表达式中的变量¶xpath允许您引用xpath表达式中的变量,使用 下面是一个基于元素“id”属性值匹配元素的示例,而不必对其进行硬编码(如前所示): >>> # `$val` used in the expression, a `val` argument needs to be passed
>>> response.xpath('//div[@id=$val]/a/text()', val='images').get()
'Name: My image 1 '
下面是另一个示例,用于查找 >>> response.xpath('//div[count(a)=$cnt]/@id', cnt=5).get()
'images'
调用时,所有变量引用都必须具有绑定值 parsel _为scrappy选择器供电的库提供了更多的细节和示例 XPath variables . 正在删除命名空间¶在处理 爬取 项目时,完全消除名称空间,只使用元素名,编写更简单/方便的xpaths通常是非常方便的。你可以使用 让我们展示一个例子,用Python Insider博客Atom feed来说明这一点。 首先,我们用要抓取的URL打开外壳: $ scrapy shell https://feeds.feedburner.com/PythonInsider
文件就是这样开始的: <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet ...
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/"
xmlns:blogger="http://schemas.google.com/blogger/2008"
xmlns:georss="http://www.georss.org/georss"
xmlns:gd="http://schemas.google.com/g/2005"
xmlns:thr="http://purl.org/syndication/thread/1.0"
xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
...
您可以看到几个名称空间声明,其中包括默认的“http://www.w3.org/2005/atom”,以及另一个使用“gd:”前缀的“http://schemas.google.com/g/2005”。 一旦进入外壳,我们可以尝试选择所有 >>> response.xpath("//link")
[]
但一旦我们呼叫 >>> response.selector.remove_namespaces()
>>> response.xpath("//link")
[<Selector xpath='//link' data='<link rel="alternate" type="text/html" h'>,
<Selector xpath='//link' data='<link rel="next" type="application/atom+'>,
...
如果您想知道为什么不总是在默认情况下调用命名空间移除过程,而不必手动调用它,这是因为两个原因,按照相关性的顺序,这是:
|
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2024-12-4 16:05 , Processed in 0.019275 second(s), 17 queries .