Очистка PDF с помощью ScraperWiki и получение ошибки "Не определено"

Я пытаюсь очистить этот PDF с помощью ScraperWiki. Текущий код дает мне ошибку с именем 'data' не определено, но я получаю ошибку на

elif int(el.attrib['left']) < 647: data['Neighborhood'] = el.text

Если я прокомментирую эту строку, я получу ту же ошибку в своем утверждении else.

Вот мой код

import scraperwiki
import urllib2, lxml.etree
#Pull Mondays
url = 'http://www.city.pittsburgh.pa.us/police/blotter/blotter_monday.pdf'
pdfdata = urllib2.urlopen(url).read()
xmldata = scraperwiki.pdftoxml(pdfdata)
root = lxml.etree.fromstring(xmldata)
# how many pages in PDF
pages = list(root)
print "There are",len(pages),"pages"
# Test Scrape of only Page 1 of 29
for page in pages[0:1]:
    for el in page:
        if el.tag == "text":
            if int(el.attrib['left']) < 11: data = { 'Report Name': el.text }
            elif int(el.attrib['left']) < 317: data['Location of Occurrence'] = el.text
            elif int(el.attrib['left']) < 169: data['Incident Time'] = el.text
            elif int(el.attrib['left']) < 647: data['Neighborhood'] = el.text
            elif int(el.attrib['left']) < 338: data['Description'] = el.text
            else:
                data['Zone'] = el.text
                print data

Что я делаю неправильно?

Также были бы оценены любые предложения лучшего решения.

1 ответ

Решение

Если вы не пропустили часть своего кода, ваш data Словарь создается только в том случае, если выполняется условие в этой строке:

if int(el.attrib['left']) < 11: data = { 'Report Name': el.text }

Все остальные ваши строки, где вы устанавливаете значения в data зависит от того, что он уже существует, поэтому вы получите NameError если это первое условие не соответствует.

Быстрое решение состоит в том, чтобы всегда создавать пустой словарь данных, например,

for page in pages[0:1]:
    for el in page:
        data = {}
        if el.tag =="text":

и т.п.

Другие вопросы по тегам