我试图获得CUSIP NO。来自this pdf的状态和状态。我只想要存在字段STATUS的行("添加"或"删除")。
我目前遇到的问题是我不知道如何获取这两个字段,因为STATUS字段大部分时间都不存在,我无法找到知道线路何时结束以及何时结束的方法新的开始。
这是我的代码:
import scraperwiki
import urllib2
import lxml
TEST_URL = 'http://www.sec.gov/divisions/investment/13f/13flist2013q4.pdf'
def parse(pdf_url):
u = urllib2.urlopen(pdf_url)
#open the url for the PDF
x = scraperwiki.pdftoxml(u.read())
r = lxml.etree.fromstring(x)
cusips = r.xpath('//text[@left="110"]/text()')
issuer_desc = r.xpath('//text[@left="526"]/text()')
statuses = r.xpath('//text[@left="703"]')
这是xml的一部分:
x[10000:12000]
'" font="6">D18190 95 8</text>\n<text top="258" left="226" width="9" height="12"
font="6"> </text>\n<text top="258" left="251" width="144" height="12" font="6">DEUTSCHE BANK
AG</text>\n<text top="258" left="526" width="27" height="12" font="6">PUT</text>\n<text
top="283" left="110" width="102" height="12" font="6">G0083B 10 8</text>\n<text top="283"
left="226" width="9" height="12" font="6">*</text>\n<text top="283" left="251" width="99"
height="12" font="6">ACTAVIS PLC</text>\n<text top="283" left="526" width="27" height="12"
font="6">SHS</text>\n<text top="283" left="703" width="45" height="12"
font="6">ADDED</text>\n<text top="309" left="110" width="102" height="12" font="6">G0083B
90 8</text>\n<text top="309" left="226" width="115" height="12" font="6"> ACTAVIS
</text>\n<text top="309" left="323" width="27" height="12" font="6">PLC</text>\n<text
top="309" left="526" width="36" height="12" font="6">CALL</text>\n<text top="309"
left="703" width="45" height="12" font="6">ADDED</text>\n<text top="335" left="110"
width="102" height="12" font="6">G0083B 95 8</text>\n<text top="335" left="226" width="115"
height="12" font="6"> ACTAVIS </text>\n<text top="335" left="323" width="27" height="12"
font="6">PLC</text>\n<text top="335" left="526" width="27" height="12"
font="6">PUT</text>\n<text top="335" left="703" width="45" height="12"
font="6">ADDED</text>\n<text top="361" left="110" width="102" height="12"
font="6">G0129K 10 4</text>\n<text top="361" left="226" width="9" height="12" font="6">*
</text>\n<text top="361" left="251" width="117" height="12" font="6">AIRCASTLE
LTD</text>\n<text top="361" left="526" width="27" height="12" font="6">COM</text>\n<text
top="387" left="110" width="102" height="12" font="6">G0129K 90 4</text>\n<text top="387"
left="226" width="133" height="12" font="6"> AIRCASTLE </text>\n<text top="387" left="341"
width="27" height="12" font="6">LTD</text>\n<text top="387" left="526" width="36"
height="12" font="6">CALL</text>\n<text top="413" left="110" width="102" height="12"'
编辑:如果字段与“添加”字段不同,那么hackish方式可能是使用xpath来获取和执行几个getnext()函数调用,直到STATUS应该是这样的字段。或者&#39; DELETED&#39;然后这个CUSIP没有STATUS存在。
Hackish解决方案功能:
def parse(pdf_url):
u = urllib2.urlopen(pdf_url)
#open the url for the PDF
x = scraperwiki.pdftoxml(u.read())
xl = lxml.etree.fromstring(x)
cusips = xl.xpath('//text[@left="110"]/text()')
issuer_desc = xl.xpath('//text[@left="526"]/text()')
statuses = xl.xpath('//text[@left="703"]')
cusips_elements = xl.xpath('//text[@left="110"]')
complete_cusips = []
for ce in cusips_elements:
try:
posible_status = ce.getnext().getnext().getnext().getnext().text
except:
print "header or non cusip related line"
if posible_status in ['ADDED', 'DELETED']:
complete_cusips.append([ce.text, posible_status])