Python 抓取:从网站上抓取所有文本,但不包括超链接文本
我在这里找到了一些有用的链接,解释如何从正文中提取所有文本: 然而,在提取所有文本的过程中,它也会刮去我不想要的超链接的文本。例如,在抓取网站时: 我使用了以下提取器:Python 抓取:从网站上抓取所有文本,但不包括超链接文本,python,xpath,scrapy,Python,Xpath,Scrapy,我在这里找到了一些有用的链接,解释如何从正文中提取所有文本: 然而,在提取所有文本的过程中,它也会刮去我不想要的超链接的文本。例如,在抓取网站时: 我使用了以下提取器: text = re.sub(' +',' ',re.sub('\n|\t|\r','',' '.join(response.selector.xpath('//body/descendant-or-self::*[not( self::script | self::style)]/text()').extract()))).st
text = re.sub(' +',' ',re.sub('\n|\t|\r','',' '.join(response.selector.xpath('//body/descendant-or-self::*[not( self::script | self::style)]/text()').extract()))).strip()
我得到了以下结果:
“引用刮登录查看标签:幽默”的人,是吗
对一本好小说不感兴趣的先生或女士,一定是
愚蠢得让人无法忍受
“登录”一词来自超链接的文本部分
<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公共投资者”和“K1和税务信息”也被删除
如何避免超链接中的文本也被刮去
非常感谢 您可以检查节点
父节点
或祖先节点
是否是您不想要的节点
例如:此xpath将查找非
节点的子节点的所有文本:
//text()[not(parent::a)]
或者,您可以使用祖先
,检查是否有任何祖先是
节点(这意味着父母、祖父母、外祖父母等):
谢谢你的快速回复!我尝试使用两种形式的[not(parent::a)]范式
'//身体/后代或自我::*[非(自我::脚本|自我::风格|祖先::a)]/text()'
以及'//身体/后代或自我::*[非(自我::脚本|自我::风格)]/text()[非(祖先::a)]
,但两者都不起作用。最后,我尝试了一种简单的方法'//body//text()[not(parent::a)])
,但这也不起作用。有没有什么是我做错了(我尝试了父母和祖先的两种组合)?@BenedictLim你所说的不起作用是什么意思?它捕获
节点下的文本?你能详细说明一下你想要表达什么结果吗?实际上我尝试了//身体/后代或自我::*[不是(self::script | self::style | self::a)]/text(),
,但是用self替换祖先,大部分都有效!我认为,如果我一直排除这种格式中的元素,应该能够减少我想要避免的文本类型。谢谢
//text()[not(ancestor::a)]