Python 关于HTML解析的问题

Python 关于HTML解析的问题,python,parsing,python-3.x,html-parsing,global-variables,Python,Parsing,Python 3.x,Html Parsing,Global Variables,这是我们为html解析编写的程序。 它工作得很好 我们在网上找到了一个演示程序,并根据需要对其进行了修改。 但我们不明白它是如何工作的 import urllib from urllib.request import urlopen address='http://www.iitb.ac.in/acadpublic/RunningCourses.jsp?deptcd=EE&year=2012&semester=1' print(address) source= urlopen

这是我们为html解析编写的程序。 它工作得很好

我们在网上找到了一个演示程序,并根据需要对其进行了修改。 但我们不明白它是如何工作的

import urllib
from urllib.request import urlopen


address='http://www.iitb.ac.in/acadpublic/RunningCourses.jsp?deptcd=EE&year=2012&semester=1'
print(address)
source= urlopen(address).read()
source=str(source)


from html.parser import HTMLParser

str1 = input('Enter name of prof:')

class MyHTMLParser(HTMLParser):
    y=" "
    def handle_data(self, data):
        flag=0
        x=str(data)
        for i in range(len(x)):
            if (x[i]=='\\'):
                flag=1
                break
        if(flag==0) :
            if(x==str1):
                global y
                print("Name of professor:",x)
                print("Name of course:",y) 
            y=x

parser = MyHTMLParser(strict=False)
parser.feed(source)
我们的问题:

  • 为什么必须首先调用类
    HTMLparser

  • 为什么调用该函数
    handle_data
    ,该函数是如何工作的

  • 为什么尽管
    y
    在类本身中,仍然需要
    global y

  • 没有人叫它;你是从它那里继承的<调用code>MyHTMLParser来创建类的实例

  • handle\u data()
    HTMLParser
    代码调用;您的子类将覆盖它以处理文档中的文本数据。通过在
    MyHTMLParser
    实例上调用
    .feed()
    ,进程启动

    有关完整的API,请参阅文档。如果你真的想知道这一切是如何运作的,你可以试着去理解

  • 事实上,你发现的例子是做错了事情。
    global y
    指的是一个不同的
    y
    变量,该变量位于模块范围内。这行代码表明,该示例的原始开发人员不理解他们在做什么。
    全局y
    行不是唯一的示例;该代码可以通过其他方式变得更具python风格

    类范围中的
    y
    定义未使用。
    handle\u data()
    方法应参考
    self.y

    class MyHTMLParser(HTMLParser):
        y = None
    
        def handle_data(self, data):
            if '\\' not in data:
                if data == str1:
                    print("Name of professor:", data)
                    print("Name of course:", self.y) 
                self.y = x
    
    这会将每个元素的元素文本存储在
    self.y
    中,如果下一个元素与您的
    str1
    全局变量匹配,那么它也会与教授姓名一起打印

  • 您可能希望转而考虑使用更直观的HTML解析器API