Python HTML解析Feed错误

时间:2012-03-25 18:54:53

标签: python html parsing html-parsing

好吧,我编写了一个简单的python程序,用HTMLParser解析HTML。这是我的代码

import re
import os.path
import getopt
import getpass
import atom
import getopt
import sys
import string
import cookielib
import ClientCookie
import urllib
import urllib2
from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint

url = 'http://distribucija.altpro.hr/cjenik_include.php'
all_data = []

def ReParse(pin):
  global values
  values = {'kaj' : 'sifra',
            'rijec' : pin,
            'prikaz' : '20' }
  data = urllib.urlencode(values)
  req = urllib2.Request(url, data)
  response = urllib2.urlopen(req)
  global the_page 
  the_page = response.read()


class MyHTMLParser(HTMLParser):
  def handle_data(self, data):
    all_data.append(data)

parser = MyHTMLParser()

ReParse('3884429')

parser.feed(the_page)
print all_data[74]



ReParse('1241236')
parser.feed(the_page)
print all_data[74]

现在,第一个parser.feed(.... works和all_data [74]是正确的,但是第二个feed提供与第一个feed完全相同的东西,但它不应该。有人可以帮助我吗? / p>

1 个答案:

答案 0 :(得分:0)

您每次都会重新分配values。你想移动它:

values = {'kaj' : 'sifra',
        'rijec' : '', #notice the change to a blank string.
        'prikaz' : '20' }

ReParse的外面。然后,在该函数内部,您将想要这个:

global values
values['rijec'] = pin

您似乎也错过了all_data。它在MyHTMLParser范围内不存在。

class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        # global statement should be her.
        all_data.append(data)

我确实觉得警告你“全球范围”通常不是你最好的选择可能是一个好主意,但这是另一回事。