34

I have a tag and I want to get all the text inside available. I am doing this:

response.css('mytag::text')

But it is only getting the text of the current tag, I also want to get the text from all the inner tags.

I know I could do something like:

response.xpath('//mytag//text()')

But I would like to do it with css selectors. How can I achieve this?

petezurich
  • 6,779
  • 8
  • 29
  • 46
Jgaldos
  • 395
  • 1
  • 4
  • 9

2 Answers2

55
response.css('mytag *::text')

The * will visit all the inner tags of mytag and ::text will get the text of each of them

eLRuLL
  • 17,114
  • 8
  • 67
  • 91
13

Get text of only selected node.

response.css('mytag::text')

Get text of selected node and its child nodes.

response.css('mytag ::text')

See the difference between these two versions. The only difference is the space. If there is no space then only text/attributes of current nodes are returned. If there is space then it selects text/attributes of self and child nodes

response.css('h1 a::attr(href)') # only current node attribute

response.css('h1 ::attr(href)') # current node and all child nodes attribute.
Hassan Raza
  • 2,435
  • 20
  • 32