Xpath 使用Scrapy提取不带标记的文本序列
假设以下模式:Xpath 使用Scrapy提取不带标记的文本序列,xpath,scrapy,Xpath,Scrapy,假设以下模式: <div> <a href="#">Option 1</a> Option 1 Description <a href="#">Option 2</a> Option 2 Description <a href="#">Option 3</a> Option 3 Description ... </div> 选项1说明 选项2说明 选项3说明 ...
<div>
<a href="#">Option 1</a>
Option 1 Description
<a href="#">Option 2</a>
Option 2 Description
<a href="#">Option 3</a>
Option 3 Description
...
</div>
选项1说明
选项2说明
选项3说明
...
我想获得每个a
标记中的文本和以下描述文本(未包装在标记中)
最好的方法是什么?我已经找到了一个可能的解决方案:
a_tags=response.css('diva'))
对于a_标记中的a:
command=a.xpath('text()').get()
description=a.xpath('./以下同级::text()[1]')。get().strip()
您可以在一个xpath选择器中创建它://div/a/下面的兄弟姐妹::text()
用于描述,而只需div::text
用于所有文本
从scrapy shell
中检查此示例:
In [1]: txt = """<div>
...: <a href="#">Option 1</a>
...: Option 1 Description
...: <a href="#">Option 2</a>
...: Option 2 Description
...: <a href="#">Option 3</a>
...: Option 3 Description
...: </div>"""
In [2]: from scrapy import Selector
In [3]: sel = Selector(text=txt)
In [4]: sel.xpath("//div/a/following-sibling::text()").extract()
Out[4]:
[u'\n Option 1 Description\n ',
u'\n Option 2 Description\n ',
u'\n Option 3 Description\n']
In [5]: sel.css('div ::text').extract()
Out[5]:
[u'\n ',
u'Option 1',
u'\n Option 1 Description\n ',
u'Option 2',
u'\n Option 2 Description\n ',
u'Option 3',
u'\n Option 3 Description\n']
[1]中的:txt=“”
...:
…:选项1说明
...:
…:选项2说明
...:
…:选项3说明
...: """
在[2]中:来自刮擦导入选择器
在[3]中:sel=选择器(text=txt)
[4]中的sel.xpath(“//div/a/以下同级::text()”).extract()
出[4]:
[u'\n选项1说明\n',
u'\n选项2说明\n',
u'\n选项3说明\n']
在[5]中:sel.css('div::text').extract()
出[5]:
[u'\n',
u‘选项1’,
u'\n选项1说明\n',
u‘选项2’,
u'\n选项2说明\n',
u‘选项3’,
u'\n选项3说明\n']