如何解析HTML/XML并从中提取信息?
我正在考虑使用Beautiful Soup,一个用于HTML抓取的Python包.我应该看看还有其他HTML抓包吗?Python不是必需的,我实际上也有兴趣了解其他语言.
到目前为止的故事:
我搜索了一个解决方案,但没有任何相关性,所以这是我的问题:
我想解析一个包含HTML文本的字符串.我想用JavaScript做.
我试过这个库,但它似乎解析了我当前页面的HTML,而不是字符串.因为当我尝试下面的代码时,它会更改我的页面标题:
var parser = new HTMLtoDOM("<html><head><title>titleTest</title></head><body><a href='test0'>test01</a><a href='test1'>test02</a><a href='test2'>test03</a></body></html>", document);
Run Code Online (Sandbox Code Playgroud)
我的目标是从HTML外部页面中提取链接,就像字符串一样.
你知道一个API来做吗?
似乎stackoverflow上的每个问题,其中提问者使用正则表达式从HTML中获取一些信息将不可避免地有一个"答案",表示不使用正则表达式来解析HTML.
为什么不?我知道那里有引用 - 不引用"真正的"HTML解析器,比如Beautiful Soup,我相信它们是强大而有用的,但是如果你只是做一些简单,快速或肮脏的事情,那么为什么当一些正则表达式语句运行得很好时,麻烦使用如此复杂的东西?
此外,是否有一些基本的东西,我不了解正则表达式,这使得它们一般是解析的错误选择?
我编写了很多解析器.到目前为止,我使用HtmlUnit无头浏览器进行解析和浏览器自动化.
现在,我想分开两个任务.
由于80%的工作只涉及解析,我想使用轻量级HTML解析器,因为在HtmlUnit中首先加载页面需要花费很多时间,然后获取源然后解析它.
我想知道哪个HTML解析器是最好的.如果它接近HtmlUnit解析器,解析器会更好.
编辑:
最好的,我至少需要以下功能:
如果它不清除脏HTML代码,那对我来说没问题.我不需要清理任何HTML源代码.我只需要一种最简单的方法来移动HtmlElements并从中获取数据.
可能重复:
从文本JavaScript中删除HTML
如何从JavaScript中的字符串中删除HTML?
我正在寻找一个用于Python的HTML Parser模块,它可以帮助我以Python列表/字典/对象的形式获取标签.
如果我有一份表格的文件:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后它应该给我一种方法来通过HTML标签的名称或ID访问嵌套标签,这样我基本上可以让它给我div标签中class='container'包含的body标签中的内容/文本,或类似的东西.
如果您使用过Firefox的"Inspect element"功能(查看HTML),您就会知道它以一种漂亮的嵌套方式为您提供所有标记,就像树一样.
我更喜欢内置模块,但可能会有点太多.
我在Stack Overflow和互联网上的一些博客上经历了很多问题,其中大多数都建议使用BeautifulSoup或lxml或HTMLParser,但其中很少有人详细介绍了这些功能,最后只是讨论哪一个更快/更有效.
我想创建一个页面,其中所有驻留在我网站上的图像都列有标题和替代表示.
我已经给我写了一个程序来查找和加载所有HTML文件,但现在我被困在如何提取src,title并alt从这个HTML:
<img src="/image/fluffybunny.jpg" title="Harvey the bunny" alt="a cute little fluffy bunny" />Run Code Online (Sandbox Code Playgroud)
我想这应该用一些正则表达式完成,但由于标签的顺序可能会有所不同,而且我需要所有这些,我真的不知道如何以优雅的方式解析它(我可以通过char方式,但这很痛苦).
是否有适用于PHP的强大而成熟的HTML解析器?快速浏览PEAR并没有改变任何东西(很多类用于生成HTML,而不是用于消费),Google教会了我很多人已经开始然后放弃了各种解析器项目.
对XML解析器不感兴趣(除非那时可以使用非格式良好的HTML)或者使用正则表达式自己攻击它.
澄清意图:我对HTML内容的过滤不感兴趣,我很有兴趣从HTML文档中提取信息.
选择2个标签之间所有文本的最佳方法是什么 - 例如:页面上所有"pre"标签之间的文本.
html-parsing ×10
html ×6
php ×3
regex ×3
javascript ×2
parsing ×2
web-scraping ×2
xml-parsing ×2
dom ×1
java ×1
python ×1
xml ×1