使用Scrapy

时间:2019-06-14 20:20:34

标签: 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>

我想获取每个a标签内的文本以及以下的描述文本(未包装在标签中)。

这样做的最好方法是什么?

2 个答案:

答案 0 :(得分:2)

我想出了一个可能的解决方案:

a_tags = response.css('div a')

for a in a_tags:
    command = a.xpath('text()').get()
    description = a.xpath('./following-sibling::text()[1]').get().strip()

答案 1 :(得分:0)

您可以在一个xpath选择器中创建它://div/a/following-sibling::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']