ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

html解析器python

2019-12-02 05:57:50  阅读:192  来源: 互联网

标签:html-parsing python


我正在尝试解析一个网站.我正在使用HTMLParser模块.问题是我想解析第一个< a href =“”>评论之后:<!-/ topOfPage-&gt ;,但我真的不知道该怎么做.因此,我在文档中发现有一个称为handle_comment的函数,但是我还没有找到如何正确使用它的方法.我有以下几点:

import HTMLParser

class LinkFinder(HTMLParser.HTMLParser):
def __init__(self, *args, **kwargs):
    # Can't use super() - HTMLParser is an old-style class
    HTMLParser.HTMLParser.__init__(self, *args, **kwargs)
    self.in_linktag = False
    self.url_cache = []
def handle_comment(self,data):
    if data == "topOfPage":
        print data
def handle_starttag(self, tag, attrs):
    if tag == "a" and any("href" == t[0] for t in attrs): # found link
        self.in_linktag = True
        self.url_cache.append([dict(attrs)['href']])
def handle_endtag(self, tag):
    if tag == "a" and self.in_linktag: # ignore '<a name=""...'
        self.in_linktag = False
def handle_data(self, data):
    if self.in_linktag:
        self.url_cache[-1].append(data)
TESTDATA = """
< html>
< body>
< div>
 < ul>
    < !-- /topOfPage --> 
< tr >
    < td class="empty-cell-left">&nbsp;</td>
    < td class="image">


    < a  href="http://test" rel="nofollow">
 < ul>
< /div>
< /body>
 < /html>
"""
def main():
lf = LinkFinder()
lf.feed(TESTDATA)
lf.close()
print lf.url_cache
if __name__ == "__main__":
    main()

怎么做?

解决方法:

您需要一个附加变量来指示解析器刚刚到达注释,以便您可以保存引用后的第一个链接中的引用.

def __init__(self, *args, **kwargs):
    # ...
    self.first_link_after_comment = False

然后,当您遇到评论时,必须切换标志.

def handle_comment(self, data):
    if data.strip() == '/topOfPage':
        self.first_link_after_comment = True

处理开始标记时,如果解析未超过注释,则要确保使其通过

def handle_starttag(self, tag, attrs):
    if not self.first_link_after_comment:
        return
    # ...

相反,当您处理结束标签时,您想确认任务已经完成.

def handle_endtag(self, tag):
    if tag == 'a' and self.in_linktag: # ignore '<a name=""...'
        self.in_linktag = False
        self.first_link_after_comment = False

最后,当您追加数据时,只需确保它不仅是一个空字符串或仅包含空格.

def handle_data(self, data):
    if self.in_linktag and data.strip():
        self.url_cache[-1].append(data)

你在这里.

$your_script.py
[['http://test']]

标签:html-parsing,python
来源: https://codeday.me/bug/20191202/2086186.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有