我正在使用scrapy shell来提取一些文本数据。以下是我在scrapy shell中提供的命令:
>>> scrapy shell "http://jobs.parklandcareers.com/dallas/nursing/jobid6541851-nurse-resident-cardiopulmonary-icu-feb2015-nurse-residency-requires-contract-jobs"
>>> response.xpath('//*[@id="jobDesc"]/span[1]/text()')
[<Selector xpath='//*[@id="jobDesc"]/span[1]/text()' data=u'Dallas, TX'>]
>>> response.xpath('//*[@id="jobDesc"]/span[2]/p/text()[2]')
[<Selector xpath='//*[@id="jobDesc"]/span[2]/p/text()[2]' data=u'Responsible for attending assigned nursi'>]
>>> response.xpath('//*[@id="jobDesc"]/span[2]/p/text()[preceding-sibling::*="Education"][following-sibling::*="Certification"]')
[]
第三个命令没有返回任何数据。我试图在命令中的两个关键字之间提取数据。我哪里错了?
答案 0 :(得分:1)
//*[@id="jobDesc"]/span[2]/p/text()
会返回一个文本节点列表。您可以在Python中过滤相关节点。以下是如何在&#34;教育/经验:&#34; 和&#34;认证/注册/许可证之间获取文字:&#34; < / em>文本段落:
>>> result = response.xpath('//*[@id="jobDesc"]/span[2]/p/text()').extract()
>>> start = result.index('Education/Experience:')
>>> end = result.index('Certification/Registration/Licensure:')
>>> print ''.join(result[start+1:end])
- Must be a graduate from an accredited school of Nursing.
UPD(关于评论中的其他问题):
>>> response.xpath('//*[@id="jobDesc"]/span[3]/text()').re('Job ID: (\d+)')
[u'143112']
答案 1 :(得分:0)
尝试:
substring-before(
substring-after('//*[@id="jobDesc"]/span[2]/p/text()', 'Education'), 'Certification')
注意:我无法测试它。
我们的想法是,您无法使用preceding-sibling
和following-sibling
,因为您查看的是同一个文本节点。您必须使用substring-before()
和substring-after()
通过组合这两个功能,您可以选择介于两者之间的功能。