Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “打印HTML”;p";仅节点_Python_Html - Fatal编程技术网

Python “打印HTML”;p";仅节点

Python “打印HTML”;p";仅节点,python,html,Python,Html,我正在尝试使用HTMLPasser只打印HTML文档的“p”标记中包含的任何内容,而不打印其他类型标记中的任何内容 from HTMLParser import HTMLParser class MyHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): if "p" in tag: print "Data in <p>:\n" def handle_dat

我正在尝试使用HTMLPasser只打印HTML文档的“p”标记中包含的任何内容,而不打印其他类型标记中的任何内容

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if "p" in tag:
            print "Data in <p>:\n"
    def handle_data(self, data):
        print data

parser = MyHTMLParser()
parser.feed('<html><head><h1>The Lorem Ipsum</h1></head>'
            '<body><p>Lorem ipsum dolor sit amet.</p><b>'
            '<h2>Click Next for the next part.</h2><h3>'
            'Coming Soon!</h3><p>Thanks.</p></body></html>')

我还不知道我应该如何正确地构建代码以使其工作。

您需要跟踪您在
标记中的时间:

class MyHTMLParser(HTMLParser):
    __in_p = None

    def handle_starttag(self, tag, attrs):
        if tag == 'p':
            self.__in_p = True
    def handle_endtag(self, tag):
        if tag == 'p':
            self.__in_p = False
    def handle_data(self, data):
        if self.__in_p:
            print("Encountered   some data:", data)

如果标记可能嵌套在自身中(
不能,
可以),则此代码将不起作用。您可以使用(
pip-install-beautifulsoup4
)和(
lxml
)来解析html。

您需要跟踪您在
标记中的时间:

class MyHTMLParser(HTMLParser):
    __in_p = None

    def handle_starttag(self, tag, attrs):
        if tag == 'p':
            self.__in_p = True
    def handle_endtag(self, tag):
        if tag == 'p':
            self.__in_p = False
    def handle_data(self, data):
        if self.__in_p:
            print("Encountered   some data:", data)

如果标记可能嵌套在自身中(
不能,
可以),则此代码将不起作用。您可以使用(
pip-install-beautifulsoup4
)和(
lxml
)解析html。

由于
HTMLParser
在单独的事件中显示数据,因此您需要跟踪状态,以便知道要打印什么。此外,标记中的
'p
将捕获任何带有“p”的标记,但不包含大写的p

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.last_tag = ''
    def handle_starttag(self, tag, attrs):
        self.last_tag = tag
    def handle_data(self, data):
        if self.last_tag in ('p', 'P'):
            print data

parser = MyHTMLParser()
parser.feed('<html><head><h1>The Lorem Ipsum</h1></head>'
            '<body><p>Lorem ipsum dolor sit amet.</p><b>'
            '<h2>Click Next for the next part.</h2><h3>'
            'Coming Soon!</h3><p>Thanks.</p></body></html>')
从HTMLParser导入HTMLParser
类MyHtmlPasser(HtmlPasser):
定义初始化(自):
HTMLPasser.\uuuuu初始化\uuuuuuuuu(自)
self.last_标记=“”
def句柄\u开始标记(自身、标记、属性):
self.last_tag=标记
def句柄_数据(自身、数据):
如果self.last_标记位于('p','p'):
打印数据
parser=MyHTMLParser()
feed('The Lorem Ipsum'
“Lorem ipsum door sit amet.

” '单击“下一步”进入下一部分。' “马上就来!谢谢。

”)
由于
HTMLParser
在一个单独的事件中显示数据,因此您需要跟踪状态,以便知道要打印什么。此外,标记中的
'p
将捕获任何带有“p”的标记,但不包含大写的p

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.last_tag = ''
    def handle_starttag(self, tag, attrs):
        self.last_tag = tag
    def handle_data(self, data):
        if self.last_tag in ('p', 'P'):
            print data

parser = MyHTMLParser()
parser.feed('<html><head><h1>The Lorem Ipsum</h1></head>'
            '<body><p>Lorem ipsum dolor sit amet.</p><b>'
            '<h2>Click Next for the next part.</h2><h3>'
            'Coming Soon!</h3><p>Thanks.</p></body></html>')
从HTMLParser导入HTMLParser
类MyHtmlPasser(HtmlPasser):
定义初始化(自):
HTMLPasser.\uuuuu初始化\uuuuuuuuu(自)
self.last_标记=“”
def句柄\u开始标记(自身、标记、属性):
self.last_tag=标记
def句柄_数据(自身、数据):
如果self.last_标记位于('p','p'):
打印数据
parser=MyHTMLParser()
feed('The Lorem Ipsum'
“Lorem ipsum door sit amet.

” '单击“下一步”进入下一部分。' “马上就来!谢谢。

”)
你看过BeautifulSoup吗?你想为
打印什么我呢

?beautifulsoup可能是一个更好的选择,原因之一是它更能原谅凌乱的html。例如,一个html文档可能忘记关闭一个
标记,这可能会让依赖于end标记的状态机无法停止打印数据而感到困惑。您看过BeautifulSoup吗?你想为
打印什么我呢

?beautifulsoup可能是一个更好的选择,原因之一是它更能原谅凌乱的html。例如,一个html文档可能忘记关闭一个
标记,这会使依赖于end标记的状态机无法停止打印数据。是的,我只是在看你的解决方案。我不确定如何处理子元素。也许这应该是一个计数来处理p中的p。顺便说一句,检查“P”和“P”,我想我更喜欢你的解决方案。我问过OP关于嵌套元素的问题。我的答案处理
这两个问题。@J.F.Sebastian我看到
如果标记=='p':
。HtmlPasser是否使用小写标记?html标记名不是大小写-sensitive@J.F.Sebastian-对,这就是为什么我两个都检查了。原来HTMLPasser的标签是小写的。@J.F.Sebastian是的,我只是在看你的解决方案。我不确定如何处理子元素。也许这应该是一个计数来处理p中的p。顺便说一句,检查“P”和“P”,我想我更喜欢你的解决方案。我问过OP关于嵌套元素的问题。我的答案处理
这两个问题。@J.F.Sebastian我看到
如果标记=='p':
。HtmlPasser是否使用小写标记?html标记名不是大小写-sensitive@J.F.Sebastian-对,这就是为什么我两个都检查了。事实证明,HTMLParser对标记使用小写。