专门收集互联网信息的程序叫作网络爬虫
通用采集器
定制开发的采集器
基本功能
下载网页
遍历URL地址
高效遍历
遍历算法
广度优先深度优先最佳优先
爬虫的危险
相对人而言,它有更快的检索速度和更深的层次, 所以它有可能使一个站点瘫痪做一个有礼貌的爬虫多线程爬虫会开启多个线程来爬取,使用很多session进行连接,造成类似于攻击的效果,别人的正常业务无法进行了爬虫还可以拿到别人不愿意公开的数据,即隐私类的信息一般情况下,爬虫会可以爬取站下所有不需要口令就可以访问的页面 – 亮明身份,告诉服务器自己是爬虫 – 有节制和限制地进行爬取操作 – 让抓取任务平均到时间段上,时间段扩大一些更好
理解网站地址
Robots协议
网站隐私保护 – robots.txt自觉文件 – 设置Robots Meta标签爬虫就是自动获取知识的第一步爬虫在某种程度上就是一个http客户端应用,相当于一个浏览器做的一部分事情
HttpCore的协议细节
HTTPTCPDNSUDPIP网络接口1,2,3
协议
在java中,一旦和被采集的web服务器建立连接,对网络资源的操作就好象对本地文件的操作一样简单了。网络中使用url来标出网络资源的位置直接用URL类和存入网页的服务器建立连接,获取网页源代码URL – 协议名 – 主机名:端口号 – 资源路径HTTP的8种可能的请求方式,爬虫常用的有3种 – GET – POST – HEADHTTP的请求格式
<request line> 请求行
<headers> 头信息
<blank line> 空行
[<request-body>] 主体
HTTP的头信息组成 – 1 通用头 – 2 请求头 – 3 响应头 – 4 实体头
服务器返回的响应第一行就包括状态码
3个数字组成用于识别web服务器处理的情况第一个数字决定了响应的类别,后两个是大类下的小类分类
1xx 信息响应类,表示接收了在处理中
2xx 处理成功响应类,正在理解,接受
3xx 重定向类,进一步处理
4xx 客户端错误,请求错了
5xx 服务器错误,服务器不能正确执行该请求
使用HttpClient下载网页
开源项目HttpClient – 基包:httpcore-4.1.2.jar – 应用包:httpclient-4.1.2.jar – 日志包:commons-logging-1.1.1.jar
抓取暗网
没有入口可以用来遍历所有信息的网站对于爬虫来说就是暗网一般形式是:前台是一个表单,获取参数后搜索得到结果页,它们是由后台数据库动态产生的一般有同一个模板PhantomJS,是一个基于WebKit的服务器端JS的运行环境Selenium是一浏览器外挂,可以使用它让浏览器自动下载某个网页或者填入登录密码等信息 – Selenium-WebDriver直接调用本机的浏览器,执行自动化任务—常用于自动化测试 – 核心代码由javascript来完成,可以运行在firefox或ie上 – 提供有Selenium java API – 如果是firefox浏览器,就直接调FirefoxDriver即可 – 而ChromeDriver比FirefoxDriver更稳定
语言 ISO 8859系,全是欧系语言
ISO 8859-1 Latin-1 西欧语言ISO 8859-2 Latin-2 中欧ISO 8859-3 Latin-3 南欧ISO 8859-4 Latin-4 北欧斯拉夫语阿拉伯语希腊语希伯来语北日耳曼语泰语波罗的语
汉字编码
GB2312 简体字BIG5 繁体字GBK 简繁和一些符号GB18030 汉字大一统标准
网页有编码,还要进一步识别网页中使用的语言
网页编码转换为字符串编码网页中的字符可能被转义成英文字符表示
使用Crawler4j,是一个单机版爬虫软件