Scrapy:从网站上抓取所有文本,但不删除超链接文本

时间:2017-08-02 05:47:14

标签: python xpath scrapy

我找到了有用的链接,解释了如何从正文中提取所有文本:How can I get all the plain text from a website with Scrapy?

但是,在提取所有文本的过程中,它还会抓取我不想要的超链接的文本。例如,在抓取网站时:http://quotes.toscrape.com/tag/humor/page/1/

我使用了以下提取器:

text = re.sub(' +',' ',re.sub('\n|\t|\r','',' '.join(response.selector.xpath('//body/descendant-or-self::*[not( self::script | self::style)]/text()').extract()))).strip()

我得到了输出:

  

" Scrape登录查看标签:幽默“这个人,不管怎样   对一部好小说不满意的绅士或女士一定是   难以忍受的愚蠢。“by ...."

单词"登录"来自超链接的文本部分

<a href="/login">Login</a>

来自超链接的文本的另一个示例是:

<a href="#" data-toggle="tab" class="login-tab-links2 toplogin">KFN PUBlIC INVESTORS<small>K1 AND TAX INFO</small></a></li>

KFN PUBlIC INVESTORS&#39;和&#39; K1和TAX INFO&#39;也被刮了。

如何避免超链接中​​的文字被删除?

提前非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以检查节点parentancestor是否是您不想要的节点。

例如:
此xpath将查找不是<a>个节点的子节点的所有节点文本:

//text()[not(parent::a)]

或者你可以使用ancestor检查是否有任何祖先是<a>个节点(这意味着父,祖父母,祖父母等等):

//text()[not(ancestor::a)]