我找到了有用的链接,解释了如何从正文中提取所有文本: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;也被刮了。
如何避免超链接中的文字被删除?
提前非常感谢!
答案 0 :(得分:1)
您可以检查节点parent
或ancestor
是否是您不想要的节点。
例如:
此xpath将查找不是<a>
个节点的子节点的所有节点文本:
//text()[not(parent::a)]
或者你可以使用ancestor
检查是否有任何祖先是<a>
个节点(这意味着父,祖父母,祖父母等等):
//text()[not(ancestor::a)]