1

私はスクレイピー シェルを使用してテキスト データを抽出しています。スクレイピーシェルで私が与えたコマンドは次のとおりです。

>>> 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"]')
[]

3 番目のコマンドはデータを返しません。コマンドの 2 つのキーワードの間でデータを抽出しようとしていました。どこが間違っていますか?

4

2 に答える 2

1

//*[@id="jobDesc"]/span[2]/p/text()テキストノードのリストを返します。関連するノードを Python でフィルタリングできます。"Education/Experience:""Certification/Registration/Licensure:"テキスト段落の間のテキストを取得する方法は次のとおりです。

>>> 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']
于 2014-12-01T18:33:09.600 に答える
0

試す:

substring-before(
  substring-after('//*[@id="jobDesc"]/span[2]/p/text()', 'Education'), 'Certification')

注:テストできませんでした。

同じテキストノードを参照しているためpreceding-sibling、 and を使用できないという考えです。following-sibling使用したいテキスト部分を抽出しsubstring-before()substring-after()

この 2 つの機能を組み合わせることで、その中間にあるものを選択します。

于 2014-12-01T18:14:10.047 に答える