我需要从巨大的HTML中提取一些文本模式。
我绝对可以用与我所需要的完全匹配的组编写一个精确的正则表达式。
什么样的工具适合提取这些群体,并把他们的名单还给我?
基本上,我正在寻找一个强大的工具,它允许您使用正则表达式处理文本/搜索/查找/替换/提取。我猜想这个工具也可能有不同的有用功能,如排序/唯一等等。
我知道有不同的linux工具可以用于这个目的,但我不知道它们的任何组合可以让我轻松地完成我需要的事情。
下面是这个问题的例子:
我有一个HTML源代码,上面有很多不同的链接。我需要从这些链接中提取所有的URL,但不是页面上的所有URL。我需要解析这些URL并进一步处理它们。
假设URL如下:http://example.com/sub/www354。
我需要提取www354并将其添加到某些模式中,例如:
myownstring/id/www354
我希望能就做这件事的最佳工具/工具提出任何建议。
发布于 2014-07-21 21:14:19
我建议看看Python和刮痕。
Python及其标准库包含了许多非常强大的文本处理工具,包括正则表达式,但是scrapy更进一步。
来自网站:
两者都是免费的,跨平台,您可以交互测试代码,这节省了很多时间。
发布于 2014-07-23 11:40:39
我推荐JSoup
它是基于Java的框架。
有“选举人”机制来查找和操作html元素。
发布于 2015-11-10 08:48:51
如果您知道C#,您可以在HtmlAgilityPack的帮助下处理NuGet,这是一个NuGet包。
它使用类似XPath的选择器,您可能已经从XML处理中熟悉了这些选择器。下面是一个我用来从网站中提取产品图像、名称和价格的例子。用它真的很直接。
using System;
using System.Net;
using System.Text;
using HtmlAgilityPack;
namespace HtmlExtract
{
class Program
{
static void Main(string[] args)
{
var doc = new HtmlDocument();
using (var client = new WebClient())
{
doc.Load(client.OpenRead(args[0]), Encoding.UTF8);
}
var products = doc.DocumentNode.SelectNodes("//div[@class=\"product-teaser\"]");
foreach (var product in products)
{
var image = product.SelectSingleNode(".//img");
Console.WriteLine("Image URL: {0}", image.GetAttributeValue("src",""));
var title = product.SelectSingleNode(".//h2/a");
Console.WriteLine("Title : {0}", title.InnerText);
var price = product.SelectSingleNode(".//span[@class=\"regular-price\"]/span[@class=\"price\"]");
Console.WriteLine("Price : {0}", price.InnerText);
Console.WriteLine();
}
}
}
}关于您的一些具体要求:
文本/搜索/查找/替换/提取.
查找HTML是通过XPaths完成的,参见上面的示例。这意味着您指定元素名称和属性名称(也是组合的)并返回节点。在该节点上,可以执行其他操作,例如字符串操作。
使用正则表达式
好的,我们不应该使用Regex解析HTML,但是在您用HtmlAgilityPack解析了HTML之后,您可以使用C# Regex类解析其余的内容。
我猜想这个工具也可能有不同的有用功能,如排序/唯一等等。
当然,例如与排序类。
上面有很多不同的链接
上面的示例从<img src="...">中提取链接。当然,您也可以以类似的方式从<a href="...">中提取链接。在这样做之后,您仍然可以决定其他需求,比如if (link.StartsWith("http://www354.") { ... }。
https://softwarerecs.stackexchange.com/questions/9973
复制相似问题