从大型文本/HTML文件中提取URL

从大型文本/HTML文件中提取URL,html,regex,large-files,Html,Regex,Large Files,我有很多文本,我需要处理的有效网址 输入是模糊的html语言,因为它主要是html。然而,它不是真正有效的HTML 我一直在尝试使用正则表达式,但遇到了一些问题 在你说(或者可能尖叫——我已经阅读了其他HTML+regex问题)“使用解析器”之前,有一件事你需要考虑: 我正在处理的文件大小约为5 GB 我不知道有哪一个解析器能够在不失败或不花费几天时间的情况下处理这个问题。此外,尽管文本内容主要是html,但不一定是有效的html,这意味着它需要一个非常宽容的解析器。最后,并非所有链接都必须在标

我有很多文本,我需要处理的有效网址

输入是模糊的html语言,因为它主要是html。然而,它不是真正有效的HTML

我一直在尝试使用正则表达式,但遇到了一些问题

在你说(或者可能尖叫——我已经阅读了其他HTML+regex问题)“使用解析器”之前,有一件事你需要考虑:
我正在处理的文件大小约为5 GB

我不知道有哪一个解析器能够在不失败或不花费几天时间的情况下处理这个问题。此外,尽管文本内容主要是html,但不一定是有效的html,这意味着它需要一个非常宽容的解析器。最后,并非所有链接都必须在
标记中(有些可能只是纯文本)

考虑到我并不真正关心文档结构,有没有更好的选择WRT提取链接

现在我正在使用正则表达式:
\b(([\w-]+:/?;www[.])[^\s()]+(?:\([\w\d]+\)|([^[:punct:]\s]./)
(在grep-E中)
但即使这样,我还是在让它运行了大约3个小时后放弃了

Regex发动机性能是否存在显著差异?我正在使用MacOS的命令行
grep
。如果有其他性能更好的兼容实现,这可能是一个选项



我不太关心语言/平台,尽管MacOS/命令行会更好

我认为您的思路是正确的,
grep
应该能够处理5Gb的文件。尝试简化正则表达式,避免使用
|
运算符和太多的括号。另外,在对整个文件运行之前,使用
head
命令获取第一个100Kb,并使用管道链接grep以实现更高的特异性。比如说,

head -c 100000 myFile | grep -E "((src)|(href))\b*=\b*[\"'][\w://\.]+[\"']"

这应该是非常快的,不是吗?

我将两个grep命令串在一起:

pv-cN源代码allContent | grep-oP“(?:\”([^\“]*?)\”(?:”([^\”)*?)(?:([^\”)*)“| grep-E”(http)|(www)|(\.com)|(\.net)|(\.to)|(\.cc)|(\.info)|(.org)|“;pv-cN-out>

我用
pv
给我一个进度指标

grep-oP“(?:\”([^\']*?)\”)(?:”([^\']*?)))(?:([^\']*?)”

拉出任何看起来像单词或引用文本且没有空格的内容

grep-E”(http)|(www)|(\.com)|(\.net)|(\.to)|(\.cc)|(\.info)|(\.org)

过滤输出中任何看起来可能是URL的内容

最后,
pv-cN out>extrLinks1

将其输出到一个文件,并给出一个很好的活动表

我可能会将生成的文件通过
sort-u
删除重复的条目,但我不想在最后将其字符串化,因为这会增加另一层复杂性,而且我非常确定sort会尝试缓冲整个文件,这可能会导致崩溃



不管怎样,由于它现在正在运行,它看起来需要大约40分钟。我以前不知道pv。这是一个非常酷的工具

它应该抓住没有计划的东西吗?(也就是说,没有
http://
)@icktoofay-那太好了。我也在寻找
标签中没有的链接。