Scrapy循环中XPath提取元素title/id属性返回None排查
错误原因
你的代码有两处核心问题:
- 变量名引用错误:循环中遍历得到的单元素选择器赋值给了
item变量,但你实际调用了未定义的direct_page对象执行xpath查询,本身就无法定位到正确的上下文节点。 - XPath语法错误:
.//title的作用是查找当前节点下所有名为<title>的子标签,而你需要提取的是当前标签自身的title属性,XPath中选取属性必须加@前缀,该写法完全匹配不到目标内容。
修正方法
你第一次XPath查询拿到的item本身就是携带id、title属性的目标标签(也就是你打印出的span元素),不需要向下查找子标签,直接提取当前节点的对应属性即可,修正后代码如下:
for item in response.xpath( '//div[@id="mosaic-provider-jobcards"]//a//*[boolean(@id)]' ): # 提取当前标签的title属性值 title_value = item.xpath('./@title').get() # 提取当前标签的id属性值 id_value = item.xpath('./@id').get() print("title属性值:", title_value) print("id属性值:", id_value)
语法说明:XPath中
./@属性名表示选取当前上下文节点的指定属性,@是属性选择的固定标识,不能省略。如果部分节点不存在title属性,.get()方法会默认返回None,不会抛出报错。
内容的提问来源于stack exchange,提问作者SFD
相关产品推荐
相关产品推荐

