如何在python中仅提取scrapy选择器中的文本

Ran*_*ngh 17 python scrapy

我有这个代码

   site = hxs.select("//h1[@class='state']")
   log.msg(str(site[0].extract()),level=log.ERROR)
Run Code Online (Sandbox Code Playgroud)

输出是

 [scrapy] ERROR: <h1 class="state"><strong>
            1</strong>
            <span> job containing <strong>php</strong> in <strong>region</strong> paying  <strong>$30-40k per year</strong></span>
                </h1>
Run Code Online (Sandbox Code Playgroud)

是否可以只获取没有任何html标签的文本

akh*_*hab 51

//h1[@class='state']
Run Code Online (Sandbox Code Playgroud)

在上面的xpath中,您选择的h1是具有class属性的标记state

所以这就是它选择所有内容的原因 h1 element

如果您只想选择h1标签文本,您只需要做

//h1[@class='state']/text()
Run Code Online (Sandbox Code Playgroud)

如果要选择h1标记文本及其子标记,则必须使用

//h1[@class='state']//text()
Run Code Online (Sandbox Code Playgroud)

所以不同之处在于/text()特定标签文本以及特定标签的文本//text()及其子标签

下面提到的代码适合你

site = ''.join(hxs.select("//h1[@class='state']/text()").extract()).strip()
Run Code Online (Sandbox Code Playgroud)

  • 很好地解释了`/ text()`和`// text()`的区别 (2认同)