一行JavaScript代码获取页面中的所有超链接地址
因为我喜欢收集Web开发类的网址,平时对网址就很敏感。
我总结了一下我收集网址的几个阶段:
1.纯手工阶段,傻傻的阶段。
在这个阶段,主要是收集一些在页面中展现出来的网址,就是说,如果网址出现在HTML注释中
导致没有展现出来的话,我是不关注的。还有就是一些超链接的网址,但是超链接的网址收集很麻烦
不能直接复制,在IE中我总是右键选择超链接的属性,打开属性框,从那里面复制网址。
后来感觉这样太慢了,想到了一个稍微方便的方法,那就是点击超链接,打开新窗口,然后复制地址栏中的
网址,这样比以前方便多了。
2.使用浏览器提供的功能来复制网址
后来在使用火狐和Chrome的过程中发现这两种浏览器都提供了一个右键菜单---“复制链接地址”
这个发现真是令我高兴极了,好像发现宝贝一样。这样不用打开新窗口也能复制地址了。
3.使用程序分析内容的半自动化阶段
后来遇到了一种情况,一个网页里面有一个列表,是一个各个语言的开发工具的列表,和相应的下载地址。
我很高兴,因为能找到这么多好东西,但是我突然想到一个问题,我使用手工去一个一个的复制,是不是有点浪费时间的
感觉呢?这时我想到了使用程序去抓取页面内容,然后提取网址出来。
我首先想到了CURL和WGET,因为这两个是在命令行下面经常使用的下载东西的工具。
但是,我更喜欢GUI下面的工具,这时候,我想到了PHP的插件----
Snoopy也可以抓取页面内容,并且提供了相应的获取超链接的接口。其实,我还想到了Python和Ruby,
一开始我并没有想到使用JavaScript,因为有一个观念束缚了我,那就是JavaScript不能读写文件,它的运行环境主要限制在浏览器中。
所以,在Web开发中能读写文件的编程语言肯定多半是服务器端的语言。
突然有一天,突然在脑子中闪现了一个想法,CURL和WGET的原理不就是下载文件,然后进行内容分析吗?
那我把要抓取的网址在浏览器中打开不也相当于下载下来了吗?这样的话,我就可以使用JS在在Chrome或者FF的控制台来分析页面的内容了啊。
于是,接下来 我就研究怎样使用JS来实现我的需求,毕竟我是做前端开发的,相对于PHP和Python来说,JavaScript才是我最熟悉的。
于是就有了今天的这些感想。
今天的目的不是要展示代码的牛逼,而是想记录一下感悟。
今天的收获是:不要思维定势,不要拘泥于一种解决方案,有时候我们可以使用我们自己最熟悉的技术和方法来解决遇到的问题,我相信这个方法也
是最快和最稳妥的解决方案。
下面贴上我写的代码:
document.body.innerHTML.match(/http:\/\/[^\s<>]*\b/g);
写的可能不符合你的需求,肯定也会有错误抓取和漏掉的,因为我只是大概的写了一下,是供自己娱乐使用的,至少比自己手工一个一个的去复制快多了,我使用想说的是代码是次要的,思路才是最重要的。
有思路的人使用任何编程语言都能写出来。
一行JavaScript代码获取页面中的所有超链接地址的更多相关文章
- jQuery基础学习5——JavaScript方法获取页面中的元素
给网页中的所有<p>元素添加onclick事件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN& ...
- js获取页面中图片的总数
查看效果:http://keleyi.com/keleyi/phtml/image/9.htm 下面是完整代码: <html><body><div id="ke ...
- 翻译 | 一行 JavaScript 代码的逆向工程
原文地址:Reverse Engineering One Line of JavaScript 原文作者:Alex Kras 译者:李波 校对者:冬青.小萝卜 几个月前,我看到一个邮件问:有没有人可以 ...
- 用JavaScript,获取Table中指定的行、列
前言: 先要谢谢George Wing的慷慨赠书<悟透JavaScript>,让我更加感受到了技术交流的重要性,呵呵~ 进入正题,面试题中有一题:如何通过JavaScript获取Table ...
- 使用HTML5的JavaScript选择器操作页面中的元素
<!doctype html><html lang="en"> <head> <meta charset="UTF-8& ...
- JS基础入门篇( 三 )—使用JS获取页面中某个元素的4种方法以及之间的差别( 一 )
1.使用JS获取页面中某个元素的4种方法 1.通过id名获取元素 document.getElementById("id名"); 2.通过class名获取元素 document.g ...
- JavaScript实现获取table中某一列的值
JavaScript实现获取table中某一列的值 1.实现源代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional/ ...
- 获取页面中任意一个元素距离body的偏移量
//offSet:等同于jQuery中的offSet方法,获取页面中任意一个元素距离body的偏移量function offSet(curEle) { var totalLeft = null; va ...
- 在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“
Response实现登录并记录用户名和密码信息 在某网站的登录页面登录时如果选择"记住用户名",登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页 ...
随机推荐
- (转)原子操作 Interlocked系列函数
上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...
- [转] iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首 ...
- Bootstrap 响应式瀑布流 (使用wookmark)
使用瀑布布局 官方 http://www.wookmark.com/jquery-plugin GitHub https://github.com/GBKS/Wookmark-jQuery (下载后 ...
- 针对PCB飞针测试快速有效的技巧
测试探针通过多路传输(multiplexing)系统连接到驱动器(信号发生器.电源供应等)和传感器(数字万用表.频率计数器等)来测试UUT上的元件.当一个元件正在测试的时候,UUT上的其它元件通过探针 ...
- 什么是PCB改板及PCB改板应注意的问题
PCB改板是指在保持原有功能一致的前提下,对原有产品设计及电路板布局走线设计的基础上进行整改设计,调整板上器件布局与线路走向,实现电子产品重新设计研发,同时又可以规避知识产权等纠纷,加快新产品研发速度 ...
- Azure 网站的新增功能:可配置的环境变量
编辑人员注释:本文章由 WindowsAzure 网站团队的项目经理Erez Benari撰写. Azure最常用的强大功能之一是 XML文档转换 (XDT),通过此功能,您可以在Windows ...
- BZOJ 3211 花神游历各国 (树状数组+并查集)
题解:首先,单点修改求区间和可以用树状数组实现,因为开平方很耗时间,所以在这个方面可以优化,我们知道,开平方开几次之后数字就会等于1 ,所以,用数组记录下一个应该开的数,每次直接跳到下一个不是1的数字 ...
- HDU 1851 A Simple Game
典型的尼姆博弈,在n对石子中,告诉你每堆的数目和每次从该堆最多可以取的数目,求最终谁将其取完. 题解:SG(i)=mi%(li+1),求异或值即可. #include <cstdio> i ...
- HDU 1787 GCD Again
题目大意:求小于n的gcd(i,n)大于1的个数: 题解:欧拉函数直接求gcd(i,n)==1的个数 用n减即可 #include <cstdio> int eular(int n){ ...
- Memcached源代码分析 - Memcached源代码分析之消息回应(3)
文章列表: <Memcached源代码分析 - Memcached源代码分析之基于Libevent的网络模型(1)> <Memcached源代码分析 - Memcached源代码分析 ...