一行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),中间页 ...
随机推荐
- JavaSE_ 多线程 总目录(23~24)
JavaSE学习总结第23天_多线程123.01 多线程程序的引入23.02 进程概述及多进程的意义23.03 线程概述及多线程的意义23.04 并行和并发的区别23.05 Java程序运行原理和JV ...
- BZOJ 3916: [Baltic2014]friends( hash )
字符串哈希..然后枚举每一位+各种判断就行了 ----------------------------------------------------------------------------- ...
- 利用python进行数据分析之数据聚合和分组运算
对数据集进行分组并对各分组应用函数是数据分析中的重要环节. group by技术 pandas对象中的数据会根据你所提供的一个或多个键被拆分为多组,拆分操作是在对象的特定轴上执行的,然后将一个函数应用 ...
- [LeetCode]题解(python):117-Populating Next Right Pointers in Each Node II
题目来源: https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 题意分析: 根据上一题,如果给定 ...
- 指针和引用区别 C++
#include <iostream> using namespace std; int main(){ ; void cubeByPoint(int *);//指针传参声明 void c ...
- ie浏览器css中的行为expression详解
CSS中的行为——expression (ie only) 最近对CSS中的行为比较感兴趣,虽然是不符合标准的也只有ie才能识别,但是他确实给css的功能扩展了不少.下面是摘自互联网上的文字和例子,因 ...
- CPU卡
CPU卡芯片通俗地讲就是指芯片内含有一个微处理器,它的功能相当于一台微型计算机.人们经常使用的集成电路卡(IC卡)上的金属片就是CPU卡芯片.CPU卡可适用于金融.保险.交警.政府行业等多个领域,具有 ...
- QString类的使用(无所不包,极其方便)
Qt的QString类提供了很方便的对字符串操作的接口. 使某个字符填满字符串,也就是说字符串里的所有字符都有等长度的ch来代替. QString::fill ( QChar ch, int size ...
- CreateFile,ReadFile等API详解(或者说MSDN的翻译)
一.*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象.通信资源对象.目录对象(只能打开).磁盘设备对象.文件对象.邮槽对象.管道 ...
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系 - SegmentFault
搞不清FastCgi与PHP-fpm之间是个什么样的关系 - SegmentFault 搞不清FastCgi与PHP-fpm之间是个什么样的关系 3赞 踩 收藏 我在网上查fastcgi与php-fp ...