我正在编写一些从网站获取数据的python代码。桌子形成良好,大部分时间一切正常。
但是,当解析器遇到空白字段时,它完全忽略它。我需要它来计算空白,但我无法弄清楚如何做到这一点。
问题在于我使用的某些数组会给我out of bounds
错误。
无论如何,这是我的代码:
class MyParser(HTMLParser):
def __init__(self, *args, **kwargs):
#There are only 2 tables in the source code. Outer one is useless to me
self.outerloop = True
#Set to true when we are in the table, and we want to collect data
self.capture_data = False
#Array to store the captured data
self.dataArray = []
HTMLParser.__init__(self, *args, **kwargs)
def handle_starttag(self, tag, attrs):
if tag == 'table' and self.outerloop:
self.outerloop=False
elif tag=='td' and not self.outerloop:
self.capture_data=True
elif tag=='th':
self.capture_data=False
def handle_endtag(self, tag):
if tag == 'table':
self.capture_data=False
def handle_data(self, data):
if self.capture_data:
self.dataArray.append(data)
#Function to call the parser
def getData(self):
self.p = MyParser()
url = 'http://www.mysite.com/get.php'
content = urllib.urlopen(url).read()
self.p.feed(content)
val=0
resultString=""
while val < len(self.p.dataArray):
resultString+=self.p.dataArray[val]+","
val+=1
return HttpResponse(resultString[:-1])
问题在于handle_data
功能。在某种程度上,我需要告诉它将<td></td>
存储为,例如空字符串。这很重要,因为我将字符串作为逗号分隔的值列表输出到我的网页,如底部所示。
对于能帮助我的人,我将非常感激。
感谢。
答案 0 :(得分:0)
一种可能的解决方案是在找到cell_data=""
时添加<td>
,在cell_data += data
上使用handle_data
更新cell_data
,并在</td>
上添加{{1}} {1}}秒。
答案 1 :(得分:0)
好的,我知道回答你自己的问题不赞成,但如果有人在将来遇到这个问题,我会提出我的来源。
我通过2个整数来修复它。它们都从0开始。当我在questin中遇到开始标记时,我会增加其中一个数字。处理完数据后,我增加了第二个数字。当我遇到这个特定标签的结束标签时,我检查了数字是否相等,如果数据被消耗,它们应该是相同的。
如果事实证明数字不相等,则意味着程序没有处理数据,即空白标签。然后我简单地将N/A
附加到数组中并使其正常工作。
见这里:
class MyHTMLParser(HTMLParser):
def __init__(self, *args, **kwargs):
self.outerloop = True
self.capture_data = False
self.dataArray = []
self.celldata="NA"
self.firstnum=0
self.secondnum=0
HTMLParser.__init__(self, *args, **kwargs)
def handle_starttag(self, tag, attrs):
if tag == 'table' and self.outerloop:
self.outerloop=False
elif tag=='td' and not self.outerloop:
self.capture_data=True # bool to indicate we want to capture data
self.firstnum+=1 # increment first num to say we have encountered the tag in question
elif tag=='th':
self.capture_data=False
def handle_endtag(self, tag):
if tag == 'table':
self.capture_data=False
elif tag == 'td' and not self.firstnum == self.secondnum: #check if they are not equal
self.dataArray.append(self.celldata) # append filler data
self.secondnum=self.firstnum # make them equal for next tag
def handle_data(self, data):
if self.capture_data::
self.dataArray.append(data)
self.secondnum=self.firstnum
def getTides(self):
self.p = MyHTMLParser()
url = 'http://www.mysite.com/page.php'
content = urllib.urlopen(url).read()
self.p.feed(content)
val=0
resultString=""
while val < len(self.p.dataArray):
resultString+=self.p.dataArray[val]+","
val+=1
return HttpResponse(resultString[:-1])