1
<div style="width: 400px;" id="accordion" class="ui-accordion ui-widget ui-helper-reset" role="tablist">
  <h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active ui-corner-top" role="tab" id="ui-accordion-accordion-header-0" aria-controls="ui-accordion-accordion-panel-0" aria-selected="true" tabindex="0"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-s"></span>
                    Description</h3>
  <div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="display: block;" id="ui-accordion-accordion-panel-0" aria-labelledby="ui-accordion-accordion-header-0" role="tabpanel" aria-expanded="true" aria-hidden="false">
                    this is the message I want to extract
  </div>
</div>

How can I extract the message using PyQuery?

from pyquery import PyQuery as pq
d = pq('http://www.somesite.com')

I've tried:

  • d('#ui-accordion-accordion-panel-0').text()
  • d('ui-accordion-content.ui-helper-reset.ui-widget-content.ui-corner-bottom.ui-accordion-content-active').text()
  • d('#accordion#ui-accordion-accordion-panel-0').text()

If I use d('#accordion').text(), every text under that divis displayed, so I don't understand why my first example doesn't return anything.

2 Answers2

0

You can use the css path, like this :

d('#accordion').find('.ui-accordion-content').text()

# or : d("#accordion .ui-accordion-content").text()

# or : d(".ui-accordion-content").text()

See example :

document.write("<br><br><br>Content : " + $("#accordion .ui-accordion-content").text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="width: 400px;" id="accordion" class="ui-accordion ui-widget ui-helper-reset" role="tablist">
  <h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-accordion-icons ui-accordion-header-active ui-state-active ui-corner-top" role="tab" id="ui-accordion-accordion-header-0" aria-controls="ui-accordion-accordion-panel-0" aria-selected="true" tabindex="0"><span class="ui-accordion-header-icon ui-icon ui-icon-triangle-1-s"></span>
                    Description</h3>
  <div class="ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content-active" style="display: block;" id="ui-accordion-accordion-panel-0" aria-labelledby="ui-accordion-accordion-header-0" role="tabpanel" aria-expanded="true" aria-hidden="false">
                    this is the message I want to extract
  </div>
</div>
user2226755
  • 12,494
  • 5
  • 50
  • 73
  • neither of your examples is working: `In [126]: d('#accordion').find('.ui-accordion-content').text()` `In [127]: ` –  Oct 31 '15 at 15:47
  • no no, `d` is ok as it's the name of the variable I'm using for storing the pyquery object. That is, `d = PyQuery(url)` –  Oct 31 '15 at 15:51
  • What did you get with `d('#accordion').html()` ? – user2226755 Oct 31 '15 at 15:56
  • everything within the first `
    `. And to add something else, `d('#accordion').children()` shows the `h3`and `div`
    –  Oct 31 '15 at 15:57
  • only the one of the first div. –  Oct 31 '15 at 16:01
  • finally, I got it, check my answer. Thanks for your help –  Oct 31 '15 at 16:05
0

Finally I managed to extract it.

d('#accordion').find('div').eq(0).text()