Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从HTML文件中提取.co.uk URL_Bash_Url_Tld - Fatal编程技术网

Bash 从HTML文件中提取.co.uk URL

Bash 从HTML文件中提取.co.uk URL,bash,url,tld,Bash,Url,Tld,需要从包含大量条目的文件中提取.co.uk URL,例如.com.us等。。我只需要.co.uk的。有办法吗? 我在学习bash 编辑: 代码示例: <a href="http://www.mysite.co.uk/" target="_blank">32</a> <tr><td id="Table_td" align="center"><a href="http://www.ultraguia.co.uk/motets.php?pg=2"

需要从包含大量条目的文件中提取.co.uk URL,例如.com.us等。。我只需要.co.uk的。有办法吗? 我在学习bash

编辑:

代码示例:

<a href="http://www.mysite.co.uk/" target="_blank">32</a>
<tr><td id="Table_td" align="center"><a href="http://www.ultraguia.co.uk/motets.php?pg=2" target="_blank">23</a><a name="23"></a></td><td id="Table_td"><input type="text" value="http://www.ultraguia.co.uk/motets.php?pg=2" size="57" readonly="true" style="border: none"></td>
输出:

href="http://www.domain1.co.uk/"
value="http://www.domain1.co.uk/"
href="http://www.domain2.co.uk/"
value="http://www.domain2.co.uk/"
http://www.mysite.co.uk/
http://www.ultraguia.co.uk/motets.php?pg=2
http://www.ultraguia.co.uk/motets.php?pg=2
我想我很接近


谢谢

由于还没有答案,我可以为您提供一个丑陋但强大的解决方案。您可以利用wget命令获取文件中的URL。通常,wget用于从thos URL下载,但通过拒绝wget通过DNS进行查找的时间,它将不会解析任何内容,只会打印URL。然后,您可以对那些包含.co.uk的URL进行grep。整个故事变成:

wget --force-html --input-file=yourFile.html --dns-timeout=0.001 --bind-address=127.0.0.1 2>&1 | grep -e "^\-\-.*\\.co\\.uk/.*"
如果您想去掉每行上剩余的时间戳信息,可以通过sed来传递输出,如| sed's/*-/'

如果您没有wget,则可以使用awk以一种方式获取它:

如果您只对唯一的URL感兴趣,请将输出导入sort-u


HTH

以下方法使用真正的HTML引擎来解析HTML,因此在遇到CDATA节或其他难以解析的语法时,将更加可靠:

links -dump http://www.google.co.uk/ -html-numbered-links 1 -anonymous \
  | tac \
  | sed -e '/^Links:/,$ d' \
        -e 's/[0-9]\+.[[:space:]]//' \
  | grep '^http://[^/]\+[.]co[.]uk'
其工作原理如下:

链接基于文本的web浏览器实际上检索站点。 使用-dump会将呈现的页面发送到标准输出。 使用-html编号的链接请求一个编号的链接表。 使用-anonymous调整默认值以增加安全性。 tac反转行顺序列表中链接的输出 sed-e“/^Links:/,$d”删除预反转后链接表之前的所有内容,确保实际页面内容不会被误发 sed-e的/[0-9]\+.[:space:][]//”从各个链接中删除编号的标题。 grep“^https\?://[^/]\+[.]co[.]uk”仅查找其主机部分以.co.uk结尾的链接。
欢迎来到堆栈溢出。请通过发布一些代码、所有相关错误消息以及您测试的任何示例来改进您的问题。grep\\\.co\\\.uk是否完成了这项工作?如果没有,请指定您试图从中提取的文件的格式,或发布该文件的相关示例片段。该示例将打印整个文件并突出显示.co.uk。我需要提取完整的URL。任何类似于grep、sed或awk的解决方案都可能因特定的HTML结构而失败,例如注释。您的解决方案必须有多强大?如果您当前的解决方案足够强大,您可以通过添加| grep href | sed's/*href=\\\.\\\\\/\1/'来清理它,那么您是想提取完整的URL,还是只提取URL的域名?这很接近,但需要很长时间,而且只能获得工作链接。好的,我添加了一些技巧来加快速度。我错误地认为它只获取工作链接-它显示了它试图解析的所有链接。awk:超出程序限制:最大字段数size=32767 FILENAME=file.html FNR=202 NR=202
http://www.mysite.co.uk/
http://www.ultraguia.co.uk/motets.php?pg=2
http://www.ultraguia.co.uk/motets.php?pg=2
links -dump http://www.google.co.uk/ -html-numbered-links 1 -anonymous \
  | tac \
  | sed -e '/^Links:/,$ d' \
        -e 's/[0-9]\+.[[:space:]]//' \
  | grep '^http://[^/]\+[.]co[.]uk'