假设采用以下模式:
<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
标签内的文本以及以下的描述文本(未包装在标签中)。
这样做的最好方法是什么?
答案 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']