用于选择输入标记元素的scrapy Xpath查询(bounty)

用于选择输入标记元素的scrapy Xpath查询(bounty),xpath,scrapy,Xpath,Scrapy,我正在使用scrapy crawl spider并尝试解析输出页面以选择所有输入标记参数,如下所示: 输入类型:必须是(文本、密码或文件) 输入id:如果找不到,请选择[input name] 我编写了一个在scrapy shell中测试的示例代码,但它没有给出确切的结果 那么,你能帮我吗 测试地点: >>>hxs.select('//input[@id]|//input[@type=“text”]|/text()).extract() [u'”, u', u', u', u''] 我不知道

我正在使用scrapy crawl spider并尝试解析输出页面以选择所有输入标记参数,如下所示:

  • 输入类型:必须是(文本、密码或文件)
  • 输入id:如果找不到,请选择[input name]
我编写了一个在scrapy shell中测试的示例代码,但它没有给出确切的结果 那么,你能帮我吗

测试地点:

>>>hxs.select('//input[@id]|//input[@type=“text”]|/text()).extract()
[u'”,
u',
u',
u',
u'']

我不知道Scrapy,但从纯XPath的角度来看,以下内容应该满足您描述的要求:

//input[(@id or @name) and (@type = 'text' or @type = 'password' or @type = 'file')]

另外,我注意到您正在尝试检索所选节点的文本内容。这可能不会返回任何内容,因为输入是自动关闭标记,不包含内部内容。

我不知道Scrapy,但从纯XPath的角度来看,以下内容应该满足您描述的要求:

//input[(@id or @name) and (@type = 'text' or @type = 'password' or @type = 'file')]

另外,我注意到您正在尝试检索所选节点的文本内容。这可能不会返回任何内容,因为输入是自动关闭的标记,不包含内部内容。

所有
输入
文本
密码
文件
类型的元素:

//input[@type='text' or @type='password' or @type='file']
我不确定您想要在id或名称上设置什么条件-这将获得具有id或名称的这三种类型的所有
input
元素:

//input[(@type='text' or @type='password' or @type='file') and (@id or @name)]
如果要测试id或名称(如果id不存在)是否等于(
XXXX
):

如果要提取id,请执行以下操作:

//input[@type='text' or @type='password' or @type='file']/@id

我认为,如果未指定id,则无法使用标准XPath提取id或名称。

所有
输入
类型的元素
文本
密码
文件

//input[@type='text' or @type='password' or @type='file']
我不确定您想要在id或名称上设置什么条件-这将获得具有id或名称的这三种类型的所有
input
元素:

//input[(@type='text' or @type='password' or @type='file') and (@id or @name)]
如果要测试id或名称(如果id不存在)是否等于(
XXXX
):

如果要提取id,请执行以下操作:

//input[@type='text' or @type='password' or @type='file']/@id


我认为,如果未指定id,则无法使用标准XPath提取id或名称。

|/text()
是根目录下的任何文本(这没有多大意义)-而不是所选节点的文本感谢帮助,但是我得到了这个错误,看起来是因为你在单引号中使用单引号。将您的值设为双引号,即包装整个XPath表达式的值。@Utkanos我也认为这可能是引号问题,所以我使用了三个引号,但结果得到了一个空列表。我还尝试了hxs.select(“”/input[@type=“text”或@type=“password”或@type=“file”]/text()“”)。extract()
但它也给了我一个空列表
|/text()
是根目录下的任何文本(这没有多大意义)-不是所选节点的文本感谢您的帮助,但我得到了这个错误,因为您在单引号中使用单引号。将您的值设为双引号,即包装整个XPath表达式的值。@Utkanos我也认为这可能是引号问题,所以我使用了三个引号,但结果得到了一个空列表。我还尝试了hxs.select(“”/input[@type=“text”或@type=“password”或@type=“file”]/text()“”)。extract()
但它也给了我一个空列表非常感谢您的帮助,但我遇到了这个错误(也是上面的错误,我还认为这可能是引用问题,所以我使用了三重引号,但结果是得到了一个空列表。请尝试在XPath中使用单引号(在XPath中,单引号和双引号是等价的-因此,如果必须使用双引号来分隔整个XPath,通常可以在XPath中使用单引号)仍然得到空列表,,请提供帮助,我们将不胜感激:)抱歉,不知道-XPath在转换为XML的页面上工作正常,我没有scrapy来测试它,非常感谢您的帮助,但是我遇到了这个错误(也是上面的同一个错误,我还认为这可能是引用问题,所以我使用了三重引号,但结果是我得到了一个空列表,请尝试在XPath中使用单引号)(在XPath中,单引号和双引号是等价的-因此,如果必须使用双引号来分隔整个XPath,则通常可以在XPath中使用单引号)仍然有空列表,,请提供帮助,我们将不胜感激:)抱歉,不知道-XPath在转换为XML的页面上工作正常,我没有scrapy来测试它