<div id="content">
   foo <br/>
   bar <br/>
</div>

मैं निम्नलिखित के साथ उपरोक्त content div का आंतरिक पाठ प्राप्त करने का प्रयास कर रहा हूं:

response.xpath('//div[@id ="content"]').extract()

यह मुझे निम्नलिखित देता है:

[u'<div id="content"> foo<br/>bar <br/></div>

मैं कैसे प्राप्त कर सकता हूं:

foo<br/>bar</br>
1
DarthVader 8 नवम्बर 2017, 20:50

2 जवाब

सबसे बढ़िया उत्तर

ये कोशिश करें:

''.join(map(methodcaller('strip'), response.xpath('//div[@id ="content"]/node()').extract()))
# output: u'foo<br>bar<br>'

कृपया ध्यान दें कि यह <br /> को lxml द्वारा <br> में बदल देता है, लेकिन यदि आपको उन आंतरिक टैग की आवश्यकता नहीं है, तो आप यह कर सकते हैं:

response.xpath('normalize-space(//div[@id ="content"])').extract_first()
# output: u'foo bar'
0
Wilfredo 9 नवम्बर 2017, 02:30

एलएक्सएमएल कई जगहों पर प्रभावशाली रूप से असुविधाजनक है - एक तत्व का आंतरिक HTML प्राप्त करना उनमें से एक है। लॉर्मस के उत्तर से अनुकूलित:

from lxml import html

def inner_html(element):
    return (
        (element.text or '') +
        ''.join(html.tostring(child, encoding='unicode') for child in element)
    )

उपयोग में:

>>> from scrapy.selector import Selector
>>> response = Selector(text="""
... <div id="content">
...    foo <br/>
...    bar <br/>
... </div>
... """)
>>> inner_html(response.css('#content')[0].root)
'\n   foo <br>\n   bar <br>\n'
0
Ry- 8 नवम्बर 2017, 22:11