Извлечь последовательность текста без тегов с помощью Scrapy - PullRequest
0 голосов
/ 14 июня 2019

Принимая следующий шаблон:

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

2 голосов
/ 14 июня 2019

Я выяснил возможное решение:

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()
0 голосов
/ 14 июня 2019

Вы можете сделать это в одном 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...