如何使用scrapy从包含更多div的div中只提取文本

2024-10-03 11:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含更多子元素的div元素。我只想从该div的所有子元素中删除文本。是否有内置函数或垃圾属性。在

示例: 我需要从http://www.jabong.com/z-collection-Olive-Mocassins-376735.html刮面包屑

从中获取内容的div id:breadcrumbs 期望产量:家用>;男士>;鞋>;休闲鞋>;Moccasins>;Olive Mocassins


Tags: 函数文本gtdivcomhttp元素示例
1条回答
网友
1楼 · 发布于 2024-10-03 11:15:52

您可以使用一个^{}和一个XPath表达式来选择ID为“breadcrumbs”的{}的所有子代文本节点,例如id("breadcrumbs")//text()

为了说明这一点,我将使用scrapy shell命令,它给您一个HtmlXPathSelector实例,hxs

paul@wheezy:~$ scrapy shell http://www.jabong.com/z-collection-Olive-Mocassins-376735.html
...
2013-10-15 09:30:06+0200 [default] DEBUG: Crawled (200) <GET http://www.jabong.com/z-collection-Olive-Mocassins-376735.html> (referer: None)
[s] Available Scrapy objects:
[s]   hxs        <HtmlXPathSelector xpath=None data=u'<html><head><meta http-equiv="Content-Ty'>
...
In [1]: hxs.select('id("breadcrumbs")//text()').extract()
Out[1]: 
[u'\r\n                                    ',
 u'Home',
 u'\r\n                                                ',
 u'>',
 u'\r\n                                                                                                ',
 u'Men',
 u'\r\n                                                ',
 u'>',
 u'\r\n                                                                                                ',
 u'Shoes',
 u'\r\n                                                ',
 u'>',
 u'\r\n                                                                                                ',
 u'Casual Shoes',
 u'\r\n                                                ',
 u'>',
 u'\r\n                                                                                                ',
 u'Moccasins',
 u'\r\n                                                ',
 u'>',
 u'\r\n                                                                                                ',
 u'Olive Mocassins',
 u'\r\n                                                         \r\n',
 u'\r\n        ',
 u'\r\n\r\n        ']

如果需要删除这些空白字符,可以将map()unicode.strip一起使用

^{pr2}$

您可以使用filter()删除这些空行

^{3}$

下面是一个将breadcrumbs作为单个字符串的单行线,再次使用str.join()map()

In [9]: ' '.join(map(unicode.strip, hxs.select('id("breadcrumbs")//text()').extract())).strip()
Out[9]: u'Home  >  Men  >  Shoes  >  Casual Shoes  >  Moccasins  >  Olive Mocassins'

甚至:

In [10]: ' '.join(filter(bool, map(unicode.strip, hxs.select('id("breadcrumbs")//text()').extract())))
Out[10]: u'Home > Men > Shoes > Casual Shoes > Moccasins > Olive Mocassins'

相关问题 更多 >