Очистка 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":
и т.п.