我试着用ScraperWiki刮这个PDF。当前代码给出的错误名称“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我做错了什么?
此外,如能提出更好的解决办法,将不胜感激。
发布于 2014-04-11 21:24:55
除非您已经跳过了一些代码,否则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":等。
https://stackoverflow.com/questions/22754233
复制相似问题