title: Text Scraping a PDF with Python (pdfquery)
body: <p>I need to scrape some PDF files to extract the following text information:</p>
  
  <p><a href="https://i.stack.imgur.com/KzMON.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/KzMON.png" alt="enter image description here"></a></p>
  
  <p>I have attempted to do this using pdfquery, by working off an example I found on Reddit (see first post): <a href="https://www.reddit.com/r/Python/comments/4bnjha/scraping_pdf_files_with_python/" rel="nofollow noreferrer">https://www.reddit.com/r/Python/comments/4bnjha/scraping_pdf_files_with_python/</a></p>
  
  <p>I wanted to test it out by getting the license numbers to start off with. I went into the generated "xmltree" file, found the first license number and got the x0,y0,x1,y1 co-ordinates in the LTTextLineHorizontal element.</p>
  
  <pre><code>import pdfquery
  from lxml import etree
  
  
  PDF_FILE = 'C:\\TEMP\\ad-4070-20-september-2018.pdf'
  
  pdf = pdfquery.PDFQuery(PDF_FILE)
  pdf.load(4,5)
  
  with open('xmltree.xml','wb') as f:
      f.write(etree.tostring(pdf.tree, pretty_print=True))
  
  product_info = []
  page_count = len(pdf._pages)
  for pg in range(page_count):
      data = pdf.extract([
          ('with_parent', 'LTPage[pageid="{}"]'.format(pg+1)),
          ('with_formatter', None),
          ('product_name', 'LTTextLineHorizontal:in_bbox("89.904, 757.502, 265.7, 770.83")'),
          ('product_details', 'LTTextLineHorizontal:in_bbox("223, 100, 737, 1114")'),
      ])
      for ix, pn in enumerate(sorted([d for d in data['product_name'] if d.text.strip()], key=lambda x: x.get('y0'), reverse=True)):
          product_info.append({'Manufacturer': pn.text.strip(), 'page': pg, 'y_start': float(pn.get('y1')), 'y_end': float(pn.get('y1'))-150})
          # if this is not the first product on the page, update the previous product's y_end with a
          # value slightly greater than this product's y coordinate start
          if ix &gt; 0:
              product_info[-2]['y_end'] = float(pn.get('y0'))
      # for every product found on this page, find the detail information that falls between the
      # y coordinates belonging to the product
      for product in [p for p in product_info if p['page'] == pg]:
          details = []
          for d in sorted([d for d in data['product_details'] if d.text.strip()], key=lambda x: x.get('y0'), reverse=True):
              if  product['y_start'] &gt; float(d.get('y0')) &gt; product['y_end']:
                  details.append(d.text.strip())
          product['Details'] = ' '.join(details)
  pdf.file.close()
  
  for p in product_info:
      print('Manufacturer: {}\r\nDetail Info:{}...\r\n\r\n'.format(p['Manufacturer'], p['Details'][0:100]))
  </code></pre>
  
  <p>However, when I run it, it doesn't print anything. There are no errors, the XML file generates fine, and I'm getting the co-ordinates straight from the XML file so there should be no issue. What am I doing wrong?</p>