2012-03-25 3 views
0

Ну, я написал простую программу на питоне, которая анализирует HTML с помощью HTMLParser. Вот мой кодPython HTML Parsing feed error

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 (.... работы и all_data [74] является правильным, но вторая подача дает то же самое, что первый один делает, но он не должен» .?. т Может кто-нибудь мне помочь

ответ

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) 

Я чувствую, что это может быть хорошей идеей, чтобы предупредить вас, что «глобальный масштаб» часто не лучший выбор, но это отдельный вопрос.

+0

Я сделал то, что вы сказали, но он не работает. 'the_page' всегда была правильной. Но парсер разбирает только первый раз, второй раз он должен выводить что-то еще, но это не так, он выводит то, что он выдает в первый раз – BKovac

+0

Хорошо, нашел ошибку, я использовал all_data.append, но после прочтения я didn ' t перезагрузите его. Мой плохой: P – BKovac