网络爬虫入门讲解

 

interesting~~...





网络爬虫入门讲解

【可爱脸】

前言
爬虫这个词在网络高度发达的今天,也许你我已经不再陌生。互联网上每天都会产生海量的数据,如何帮助人们从中准确地找到自己想要的信息一直是相关从业人员在努力改善的事情。其中以搜索引擎为代表的应用系统是我们日常接触最多的表现形式。爬虫是否对测试工作有所帮助呢?带着这个问题,我们先了解下爬虫的基本概念和原理:参考360百科可知网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。
爬虫??interesting~~
网络爬虫的基本结构和工作流程
实际中,一个通用网络爬虫的实现方式可以有很多不同的方式,但大体原理趋同。下面是笔者接触到的框架,笔者以此为背景为大家开展分享。

1. 通用网络爬虫的框架图:
基本工作流如下 - 将种子URL(即开始抓取的入口URL)和配置文件交给控制器,配置文件中可以包含抓取深度,文件类型,使用的账号信息以及线程数,robots等等。 - 控制器将从待处理URL中获取一定数量的URL交给空闲的线程去抓取相应的网页内容 - 每个网页处理线程在下载到相应URL的内容后会将当前URL放入已处理URL表中。同时处理线程会获取当前内容里所有的链接地址和已处理URL表进行比对,将没有处理过的放入待处理URL表中。 - 网页处理线程中会调用内容处理实现类来对当前内容进行处理,比如通过正则表达式提取想要获取的数据,将处理结果保存到数据库中。

2. 爬虫实现时要注意几个方面:

判断返回页面的状态码,对有跳转的页面需要跟踪到跳转后的URL(下面的代码截取自开源的java爬虫工具crawler4j)
处理js动态加载:由于js是在浏览器中执行后才能看到内容,在爬虫获取时未执行,找到指定HTML标签下内容肯定为空,这个时候的处理办法,一般来讲主要是要找到包含内容的js代码串,然后通过正则表达式获得相应的内容,而不是解析HTML标签。如要在包含下面js片段的页面中提取"得分"值:
通过"id=result"的标签找不到,但是可以通过正则表达式得分:(\d+)匹配。

Ajax异步请求,这种在现在的网站上经常使用,一般需要在用户进行交互操作后才能返回内容。对于这种情况可以使用一些模拟浏览器的工具如HtmlUnit,在里面通过模拟用户点击操作等获取想要的数据,这种方式可能会造成系统资源消耗严重,稳定性也不好。另一种方式就是直接针对ajax接口参数拼接url完成数据抓取。

对于设计应用于较大规模网络的爬虫,还应考虑完成全部页面抓取所需要的时间和存储资源,这时候爬虫设计要采用分布式应用架构。这点在这里不展开讨论了。
三、测试领域的应用
因为我们是做测试的,所以也想探讨爬虫在自动化测试中能有哪些应用。目前能够可预见的是在下列领域尝试: - 利用爬虫遍历web服务的每个URL来检查无效链接 - 结合seleniumwebdriver做随机性测试(如crawjax) - 可以定期更新UI自动化测试中Web对象仓库
四、结束语
对于网络爬虫的学习研究我们也是刚刚开始,期待后续有新的体会再与大家分享更多相关内容。最后附上一个开源的java爬虫工具crawler4j(下载地址: https://github.com/yasserg/crawler4j),这个项目也是我在学习爬虫所使用的项目。前面的网页上有示例,感兴趣的同学可以使用看看。
小编没看够啊~~
小编忍住不哭~~
Qtest之道


    关注 Qtest之道


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册