我有一个从随机网站中提取的不同格式的网址列表:
http://www.w3.org/2000/svg http://www.w3.org/1999/xlink
/bg-images/png/search-magnifying-glass.png
http://www.boston.com/weather?p1=BGMenu_SubnavBostonGlobe.com
http://www.w3.org/2000/svg
http://www.w3.org/1999/xlink
/bg-images/png/search-magnifying-glass.png http://www.w3.org/2000/svg
http://www.w3.org/1999/xlink
/bg-images/png/bg-logo--full.png
http://www.w3.org/2000/svg
http://www.w3.org/1999/xlink
/bg-images/png/bg-logo--bug.png
https://www.bostonglobe.com
https://www.bostonglobe.com
/metro/2018/06/18/sjc-ruling-millionaires-tax-coming-monday/unxBjYa0JGHKfMKUBzsMjO/story.html?p1=BGHeader_SmartBar_Breaking
/metro/2018/06/18/sjc-ruling-millionaires-tax-coming-monday/unxBjYa0JGHKfMKUBzsMjO/story.html?p1=BGHeader_SmartBar_Breaking
http://www.w3.org/1999/xlink /bg-images/png/bg-logo-large--full.png
http://www.boston.com/section/cars?s_campaign=bg:hp:mainnav:cars
http://realestate.boston.com?s_campaign=bg:hp:mainnav:realestate
http://www.w3.org/2000/svg http://www.w3.org/1999/xlink
它们都采用不同的格式(可选的http / https / www)。我需要过滤它以获得任何类型的可下载的#34;内容如* jpg,* png,* html等
预期产出:
/bg-images/png/search-magnifying-glass.png
/bg-images/png/search-magnifying-glass.png
/bg-images/png/bg-logo--full.png
/bg-images/png/bg-logo--bug.png
/metro/2018/06/18/sjc-ruling-millionaires-tax-coming-monday/unxBjYa0JGHKfMKUBzsMjO/story.html?p1=BGHeader_SmartBar_Breaking
/metro/2018/06/18/sjc-ruling-millionaires-tax-coming-monday/unxBjYa0JGHKfMKUBzsMjO/story.html?p1=BGHeader_SmartBar_Breaking (not sure about these yet just in case)
http://www.w3.org/1999/xlink /bg-images/png/bg-logo-large--full.png
这是我第一次尝试编写正则表达式,我想出了类似的东西:
(https?/\/)?(www\.)?[-a-zA-Z0-9@:;%._\+~\/#=]{2,256}\.[a-z]{2,4}a{0,1}\b([-a-zA-Z0-9@:;!%_\+.,~#?&//=]*)
输出大量垃圾线。有什么建议吗?
答案 0 :(得分:1)
由于您的示例Input_file在最后一行有空格,因此我使用sub
删除这些空格,如果它们不存在,则可以将其删除。您可以尝试一下,让我知道这是否对您有所帮助。
awk '{sub(/ *$/,"")}
(/^http/||/^https/||/^www/||/^\//) && \
(/.*png$/||/.*html$/||/.*jpg$/||/BGHeader_SmartBar_Breaking$/)
' Input_file
答案 1 :(得分:0)
您需要手动检查它们,而不是从某些可疑Feed中提取某些可疑网址,因为一般来说,网址不包含有关其内容的信息。许多存储服务使用ID来识别图像,而不是使用扩展名。但标题包含此信息:
How to get content type of a web address?
那么可下载的是什么?一切。我的意思是文字,你看到的一切都是可下载的。例如,对于图像,内容类型将是这样的:
image/gif, image/png, image/jpeg, image/bmp, image/webp
对于音频/视频:
audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
部分完整列表可在此处找到:http://htmlbook.ru/html/value/mime
至于解决方案 - 只需嗅探多个IO线程中的每个链接。通过这种方式,您还可以过滤那些需要一些身份验证,过期或无效的人。通常是非常便宜的请求。