Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 使用Scrapy提取不带标记的文本序列_Xpath_Scrapy - Fatal编程技术网

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']