【问题标题】:Python HTML Parsing feed errorPython HTML解析提要错误
【发布时间】:2012-03-25 18:54:53
【问题描述】:

好吧,我已经编写了一个简单的 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(.... 有效并且 all_data[74] 是正确的,但是第二个提要给出的内容与第一个提要完全相同,但它不应该。任何人都可以帮助我吗?

【问题讨论】:

    标签: python html parsing html-parsing


    【解决方案1】:

    您每次都在重新分配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)
    

    我确实觉得提醒您“全局范围”通常不是您的最佳选择可能是个好主意,但这是另一回事。

    【讨论】:

    • 我按照你说的做了,但是没用。 the_page 总是正确的。但是解析器只解析第一次,第二次它应该输出别的东西,但它没有,它输出它第一次输出的东西
    • 好的,发现错误,我使用了all_data.append,但读完后我没有重置它。我的坏:P
    猜你喜欢
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多