Python:使用html解析器提取特定数据

2024-04-30

我开始使用 Python 中的 HTMLParser 从网站中提取数据。 我得到了我想要的一切,除了两个 HTML 标签内的文本。 以下是 HTML 标签的示例:

<a href="http://wold.livingsources.org/vocabulary/1" title="Swahili" class="Vocabulary">Swahili</a>

还有其他以 开头的标签。他们有其他属性和值,因此我不想拥有他们的数据:

<a href="http://wold.livingsources.org/contributor#schadebergthilo" title="Thilo Schadeberg" class="Contributor">Thilo Schadeberg</a>

该标签是表中的嵌入标签。我不知道这与其他标签是否有什么区别。 我只想要一些名为“a”且属性为 class="Vocabulary" 的标签中的信息,并且我想要标签内的数据,在示例中它将是“斯瓦希里语”。 所以我所做的是:

class AllLanguages(HTMLParser):
    '''
    classdocs
    '''
    #counter for the languages
    #countLanguages = 0
    def __init__(self):
        HTMLParser.__init__(self)
        self.inLink = False
        self.dataArray = []
        self.countLanguages = 0
        self.lasttag = None
        self.lastname = None
        self.lastvalue = None
        #self.text = ""


    def handle_starttag(self, tag, attr):
        #print "Encountered a start tag:", tag      
        if tag == 'a':
            for name, value in attr:
                if name == 'class' and value == 'Vocabulary':
                    self.countLanguages += 1
                    self.inLink = True
                    self.lasttag = tag
                    #self.lastname = name
                    #self.lastvalue = value
                    print self.lasttag
                    #print self.lastname
                    #print self.lastvalue
                    #return tag
                    print self.countLanguages




    def handle_endtag(self, tag):
        if tag == "a":
            self.inlink = False
            #print "".join(self.data)

    def handle_data(self, data):
        if self.lasttag == 'a' and self.inLink and data.strip():
            #self.dataArray.append(data)
            #
            print data

该程序打印标签中包含的所有数据,但我只希望标签中包含的数据具有正确的属性。 我如何获得这些具体数据?


看来你忘记设置了self.inLink = False in handle_starttag默认情况下:

from HTMLParser import HTMLParser


class AllLanguages(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.inLink = False
        self.dataArray = []
        self.countLanguages = 0
        self.lasttag = None
        self.lastname = None
        self.lastvalue = None

    def handle_starttag(self, tag, attrs):
        self.inLink = False
        if tag == 'a':
            for name, value in attrs:
                if name == 'class' and value == 'Vocabulary':
                    self.countLanguages += 1
                    self.inLink = True
                    self.lasttag = tag

    def handle_endtag(self, tag):
        if tag == "a":
            self.inlink = False

    def handle_data(self, data):
        if self.lasttag == 'a' and self.inLink and data.strip():
            print data


parser = AllLanguages()
parser.feed("""
<html>
<head><title>Test</title></head>
<body>
<a href="http://wold.livingsources.org/vocabulary/1" title="Swahili" class="Vocabulary">Swahili</a>
<a href="http://wold.livingsources.org/contributor#schadebergthilo" title="Thilo Schadeberg" class="Contributor">Thilo Schadeberg</a>
<a href="http://wold.livingsources.org/vocabulary/2" title="English" class="Vocabulary">English</a>
<a href="http://wold.livingsources.org/vocabulary/2" title="Russian" class="Vocabulary">Russian</a>
</body>
</html>""")

prints:

Swahili
English
Russian

另外,请看一下:

  • scrapy https://scrapy.readthedocs.org/en/latest/
  • lxml http://lxml.de/
  • 美丽汤 https://pypi.python.org/pypi/BeautifulSoup/

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:使用html解析器提取特定数据 的相关文章

随机推荐

  • 构建和部署之间的区别?

    和有什么区别build and deploy and re deploy 当你只有一些时应该做什么HTML变化和没有Java代码改变 我应该做一个build and deploy或者只是一个re deploy 免责声明 定义构建和部署的含义
  • 如何用 Go 将多个字符串解析为模板?

    有没有像这样的简单方法template ParseFiles base html home html 但是对于字符串来说 如何从一组字符串构建模板 我有一个基本模板和一个页面模板列表 全部为字符串 我想在基本模板之上构建它们 我想出了如何合
  • 痛苦的泛型,运算符“>=”不能应用于“T”和“T”类型的操作数

    这是我的代码 class BinaryTree
  • VB错误“需要对象”

    当我运行以下脚本时 我在第 54 行 最后一行 收到 需要对象 错误 怎么了 Option Explicit Dim cmdString g strHostFile filepath flexnetpath importcmd dtmTod
  • ora-00972 标识符太长 oracle 10g

    我收到标题中提到的错误 我使用的是 36 个字符的 ID 此错误仅在我的 asp net web 表单中的 sqldatasource 中抛出 当我执行更新时这不是问题Oracle sql developer 我怎样才能解决这个问题 Ora
  • Spring Security Ldap,仅登录指定组中的用户

    就像标题一样 我希望只有规范的用户 这是我的验证码 public void configureGlobal AuthenticationManagerBuilder auth throws Exception auth ldapAuthen
  • 安全沙箱违规

    运行我的 Flash 应用程序时出现以下错误 违反安全沙箱 与 rtmp system ip live 的连接已停止 不允许从 file F Flash 工作 RTS RT vlab BIOTECH NEO 简单神经元的被动属性 vi 特征
  • Google API 控制台 - 缺少客户端密钥

    我尝试为 Android 应用程序创建一个测试客户端 ID 该应用程序使用 OAUTH 2 0 作为检索用户配置文件的登录名 我按照步骤在谷歌控制台上完成了客户端 ID 的创建 但我没有在任何地方看到客户端密钥 我正在尝试帮助我的雇主获取其
  • catch 块和方法中的 throw new Exception 之间的区别

    在一种方法中 我希望能够将一个值插入到 div 中 该 div 是我选择解析的 html 文档的一部分 public void AddToDiv string div Code to read the html document and l
  • 使用带有 _O_U8TEXT 的 setmode 处理 unicode 时 C++ 崩溃

    我尝试打印 unicode 的是 setmode fileno stdout O U8TEXT string str u8 unicode hangul cout lt lt str lt lt endl 我使用 setmode 来正确显示
  • 如何打印/存储非 ASCII 字符(unicode?)

    我正在阅读大量的音乐家档案 其中许多艺术家的名字中都有奇怪的字符 因为他们可能来自德国或其他一些具有非 ASCII 字符的国家 我希望能够将这些音乐家的名字存储在列表中并将它们打印到控制台 如何打印从文本文件读入的带有奇怪字符的字符串 让我
  • 我们可以通过编程方式访问 iOS 系统设置的常规/辅助功能/字幕和字幕吗?

    我必须使用 iOS 设置应用程序中的字幕和字幕系统设置 有什么办法 我们可以通过编程来获取它 您可以使用 UIAccessibilityIsClosedCaptioningEnabled 方法来了解 iOS 设置 gt 常规 gt 辅助功能
  • 删除 Eclipse 图形布局中的 Android 状态栏

    如何删除 Eclipse 图形布局中 android 模拟器的状态栏 我的应用程序设置为以全屏模式运行 但我在布局方面遇到了困难 因为状态栏出现在 Eclipse 的图形布局中 您只需更改下拉列表中的主题 或者用 Android 术语来说可
  • 使内容适合 div 的宽度

    如何使文本适合 div 的宽度 这是我的代码 div class column a href class user thumbnail img src width 100px height 100px a span class name t
  • ImageMagick - 向图像添加白色透明覆盖层

    我需要拍摄一张正常的图像 并添加白色透明覆盖层 使其看起来像这样 不要注意转换后图像上的文本或它是原始图像的裁剪版本这一事实 我需要简单地将顶部转换为完全相同的图像 只是使用白色透明的覆盖层 我还需要它是一个 cli 命令 更新答案 这更容
  • 如何在Sql Server 2008全文搜索中忽略html标签

    我正在使用 SQL Server 2008 全文搜索引擎开发一个知识库项目 项目包含在文章和文件中 其中每篇文章都有多个文件 在这些文章中 全部内容是纯html 现在 我在 SQL Server 2008 上成功创建了全文目录和索引 并且我
  • Python sched.scheduler 超过最大递归深度

    我最近开始学习 Python 我正在制作的简单应用程序的一部分包括一个在其自己的线程中运行的带有 hh mm ss 显示的计时器 环顾网络 我发现了两种实现此目的的方法 使用 sched scheduler 使用threading Time
  • 创建自定义 BigDecimal 类型

    在我的应用程序中 所有 BigDecimal 数字都被缩放为具有两位小数 换句话说 每次我在代码中创建一个新的 BigDecimal 时 我也需要使用方法scale BigDecimal x BigDecimal ZERO x setSca
  • 如何在 Rails Admin 中隐藏添加新选项

    我正在自定义 Rails Admin https github com sferik rails admin https github com sferik rails admin 我需要禁用 隐藏某些型号的 添加新 选项 任何帮助都会为我
  • Python:使用html解析器提取特定数据

    我开始使用 Python 中的 HTMLParser 从网站中提取数据 我得到了我想要的一切 除了两个 HTML 标签内的文本 以下是 HTML 标签的示例 a href http wold livingsources org vocabu