第一部分 基础概念和技术 3
第1章 本书主要内容 3
1.1发现互联网的真正潜力 3
1.2对开发者来说 3
1.2.1网络机器人开发者是紧缺人才 4
1.2.2编写网络机器人是有趣的 4
1.2.3网络机器人利用了“建设性黑客”技术 4
1.3对企业管理者来说 5
1.3.1为业务定制互联网 5
1.3.2充分利用公众对网络机器人的经验不足 5
1.3.3事半功倍 6
1.4结论 6
第2章 网络机器人项目创意 7
2.1浏览器局限性的启发 7
2.1.1聚合并过滤相关信息的网络机器人 7
2.1.2解释在线信息的网络机器人 8
2.1.3个人代理网络机器人 9
2.2从疯狂的创意开始 9
2.2.1帮助繁忙的人解脱 10
2.2.2自动执行,节省开支 10
2.2.3保护知识产权 10
2.2.4监视机会 11
2.2.5在网站上验证访问权限 11
2.2.6创建网上剪报服务 11
2.2.7寻找未授权的Wi-Fi网络 12
2.2.8跟踪网站技术 12
2.2.9让互不兼容的系统通信 12
2.3结论 13
第3章 下载网页 14
3.1当它们是文件,而不是网页 14
3.2用PHP的内置函数下载文件 15
3.2.1用fopen()和fgets()下载文件 15
3.2.2用file()函数下载文件 17
3.3 PHP/CURL库介绍 18
3.3.1多种传输协议 18
3.3.2表单提交 19
3.3.3基本认证技术 19
3.3.4 cookie 19
3.3.5重定向 19
3.3.6代理名称欺诈 19
3.3.7上链管理 20
3.3.8套接字管理 20
3.4安装PHP/CURL 20
3.5 LIB_http库 21
3.5.1熟悉默认值 21
3.5.2使用LIB_http 21
3.5.3了解更多HTTP标头信息 24
3.5.4检查LIB http的源代码 25
3.6结论 25
第4章 基本解析技术 26
4.1内容与标签相混合 26
4.2解析格式混乱的HTML文件 26
4.3标准解析过程 27
4.4使用LIB_parse库 27
4.4.1用分隔符分解字符串:split_string()函数 27
4.4.2提取分隔符之间的部分:return_between()函数 28
4.4.3将数据集解析到数组之中:parse_array()函数 29
4.4.4提取属性值:get_attribute()函数 30
4.4.5移除无用文本:remove()函数 32
4.5有用的PHP函数 32
4.5.1判断一个字符串是否在另一个字符串里面 32
4.5.2用一个字符串替换另一个字符串中的一部分 33
4.5.3解析无格式文本 33
4.5.4衡量字符串的相似度 34
4.6结论 34
4.6.1别相信编码混乱的网页 34
4.6.2小步解析 35
4.6.3不要在调试的时候渲染解析结果 35
4.6.4少用正则表达式 35
第5章 使用正则表达式的高级解析技术 36
5.1模式匹配——正则表达式的关键 36
5.2 PHP的正则表达式类型 36
5.2.1 PHP正则表达式函数 37
5.2.2与PHP内置函数的相似之处 38
5.3从例子中学习模式匹配 39
5.3.1提取数字 39
5.3.2探测字符串序列 39
5.3.3字母字符匹配 40
5.3.4通配符匹配 40
5.3.5选择匹配 41
5.3.6分组和范围匹配的正则表达式 41
5.4与网络机器人开发者相关的正则表达式 41
5.4.1提取电话号码 42
5.4.2下一步学习什么 45
5.5何时使用正则表达式 46
5.5.1正则表达式的长处 46
5.5.2模式匹配用于解析网页的劣势 46
5.5.3哪个更快,正则表达式还是PHP的内置函数 48
5.6结论 48
第6章 自动表单提交 49
6.1表单接口的反向工程 50
6.2表单处理器、数据域、表单方法和事件触发器 50
6.2.1表单处理器 50
6.2.2数据域 51
6.2.3表单方法 52
6.2.4多组件编码 54
6.2.5事件触发器 54
6.3无法预测的表单 55
6.3.1 JavaScript能在提交之前修改表单 55
6.3.2表单HTML代码通常无法阅读 55
6.3.3 cookie在表单里不存在,却会影响其操作 55
6.4分析表单 55
6.5结论 59
6.5.1不要暴露身份 59
6.5.2正确模拟浏览器 59
6.5.3避免表单错误 60
第7章 处理大规模数据 61
7.1组织数据 61
7.1.1命名规范 61
7.1.2在结构化文件里存储数据 62
7.1.3在数据库里存储文本数据 64
7.1.4在数据库里存储图片 66
7.1.5用数据库,还是用文件系统 68
7.2减小数据规模 68
7.2.1保存图片文件的地址 68
7.2.2压缩数据 68
7.2.3移除格式信息 71
7.3生成图片的缩略图 72
7.4结论 73
第二部分 网络机器人项目 77
第8章 价格监控网络机器人 77
8.1目标网站 77
8.2设计解析脚本 78
8.3初始化以及下载目标网页 79
8.4进一步探讨 83
第9章 图片抓取网络机器人 84
9.1图片抓取网络机器人例子 84
9.2创建图片抓取网络机器人 85
9.2.1二进制安全下载过程 86
9.2.2目录结构 87
9.2.3主脚本 87
9.3进一步探讨 90
9.4结论 90
第10章 链接校验网络机器人 91
10.1创建链接校验网络机器人 91
10.1.1初始化网络机器人并下载目标网页 92
10.1.2设置页面基准 92
10.1.3提取链接 93
10.1.4运行校验循环 93
10.1.5生成URL完整路径 93
10.1.6下载全链接路径 94
10.1.7展示页面状态 95
10.2运行网络机器人 95
10.2.1 LIB_http_codes 96
10.2.2 LIB_resolve_addresses 96
10.3进一步探讨 97
第11章 搜索排名检测网络机器人 98
11.1搜索结果页介绍 99
11.2搜索排名检测网络机器人做什么工作 100
11.3运行搜索排名检测网络机器人 100
11.4搜索排名检测网络机器人的工作原理 101
11.5搜索排名检测网络机器人脚本 101
11.5.1初始化变量 102
11.5.2开始循环 102
11.5.3获取搜索结果 103
11.5.4解析搜索结果 103
11.6结论 106
11.6.1对数据源要厚道 106
11.6.2搜索网站对待网络机器人可能会不同于浏览器 106
11.6.3爬取搜索引擎不是好主意 106
11.6.4熟悉Google API 107
11.7进一步探讨 107
第12章 信息聚合网络机器人 108
12.1给网络机器人选择数据源 108
12.2信息聚合网络机器人举例 109
12.2.1熟悉RSS源 109
12.2.2编写信息聚合网络机器人 111
12.3给信息聚合网络机器人添加过滤机制 114
12.4进一步探讨 115
第13章 FTP网络机器人 116
13.1 FTP网络机器人举例 116
13.2 PHP和FTP 118
13.3进一步探讨 119
第14章 阅读电子邮件的网络机器人 120
14.1 POP3协议 120
14.1.1登录到POP3邮件服务器 120
14.1.2从POP3邮件服务器上读取邮件 121
14.2用网络机器人执行POP3命令 123
14.3进一步探讨 125
14.3.1电子邮件控制的网络机器人 125
14.3.2电子邮件接口 125
第15章 发送电子邮件的网络机器人 127
15.1电子邮件、网络机器人以及垃圾邮件 128
15.2使用SMTP和PHP发送邮件 128
15.2.1配置PHP发送邮件 128
15.2.2使用mai10函数发送电子邮件 129
15.3编写发送电子邮件通知的网络机器人 130
15.3.1让合法的邮件不被过滤掉 132
15.3.2发送HTML格式的电子邮件 132
15.4进一步探讨 134
15.4.1使用回复邮件剪裁访问列表 134
15.4.2使用电子邮件作为你的网络机器人运行的通知 134
15.4.3利用无线技术 134
15.4.4编写发送短信的网络机器人 135
第16章 将一个网站转变成一个函数 136
16.1编写一个函数接口 136
16.1.1定义函数接口 137
16.1.2分析目标网页 137
16.1.3使用describe_zipcode()函数 140
16.2结论 141
16.2.1资源分发 142
16.2.2使用标准接口 142
16.2.3设计定制的轻量级“Web服务” 142
第三部分 高级设计技巧 145
第17章 蜘蛛 145
17.1蜘蛛的工作原理 145
17.2蜘蛛脚本示例 146
17.3 LIB_simple_spider 149
17.3.1 harvest_links() 149
17.3.2 archive_links() 149
17.3.3 get_domain() 150
17.3.4 exclude_link() 150
17.4使用蜘蛛进行实验 152
17.5添加载荷 152
17.6进一步探讨 153
17.6.1在数据库中保存链接 153
17.6.2分离链接和载荷 153
17.6.3在多台计算机上分配任务 153
17.6.4管理页面请求 154
第18章 采购机器人和秒杀器 155
18.1采购机器人的原理 155
18.1.1获取采购标准 155
18.1.2认证买家 155
18.1.3核对商品 156
18.1.4评估购物触发条件 156
18.1.5执行购买 157
18.1.6评估结果 157
18.2秒杀器的原理 157
18.2.1获取采购标准 158
18.2.2认证竞拍者 158
18.2.3核对拍卖商品 158
18.2.4同步时钟 158
18.2.5竞价时间 159
18.2.6提交竞价 160
18.2.7评估结果 160
18.3测试自己的网络机器人和秒杀器 160
18.4进一步探讨 160
18.5结论 161
第19章 网络机器人和密码学 162
19.1设计使用加密的网络机器人 162
19.1.1 SSL和PHP内置函数 163
19.1.2加密和PHP/CURL 163
19.2网页加密的简要概述 163
19.3结论 164
第20章 认证 165
20.1认证的概念 165
20.1.1在线认证的类型 165
20.1.2用多种方式加强认证 166
20.1.3认证和网络机器人 166
20.2示例脚本和实践页面 166
20.3基本认证 167
20.4会话认证 168
20.4.1使用cookie会话的认证 169
20.4.2使用查询会话进行认证 172
20.5结论 174
第21章 高级cookie管理 175
21.1 cookie的工作原理 175
21.2 PHP/CURL和cookie 177
21.3网络机器人设计中面临的cookie难题 178
21.3.1擦除临时性cookie 178
21.3.2管理多用户的cookie 178
21.4进一步探讨 179
第22章 计划运行网络机器人和蜘蛛 180
22.1为网络机器人配置计划任务 180
22.2 Windows XP任务调度程序 181
22.2.1计划网络机器人按日运行 181
22.2.2复杂的计划 182
22.3 Windows 7任务调度程序 184
22.4非日历事件触发器 186
22.5结论 188
22.5.1如何决定网络机器人的最佳运行周期 188
22.5.2避免单点故障 188
22.5.3在计划中加入变化性 188
第23章 使用浏览器宏抓取怪异的网站 189
23.1高效网页抓取的阻碍 190
23.1.1 AJAX 190
23.1.2怪异的JavaScript和cookie行为 190
23.1.3 Flash 190
23.2使用浏览器宏解决网页抓取难题 191
23.2.1浏览器宏的定义 191
23.2.2模拟浏览器的终极网络机器人 191
23.2.3安装和使用iMacros 191
23.2.4创建第一个宏 192
23.3结论 197
23.3.1宏的必要性 197
23.3.2其他用途 197
第24章 修改iMacros 198
24.1增强iMacros的功能 198
24.1.1不使用iMacros脚本引擎的原因 198
24.1.2创建动态宏 199
24.1.3自动装载iMacros 202
24.2进一步探讨 204
第25章 部署和扩展 205
25.1一对多环境 205
25.2一对一环境 206
25.3多对多环境 206
25.4多对一环境 206
25.5扩展和拒绝服务攻击 207
25.5.1简易的网络机器人也会产生大量数据 207
25.5.2目标的低效 207
25.5.3过度扩展的弊端 207
25.6创建多个网络机器人的实例 208
25.6.1创建进程 208
25.6.2利用操作系统 208
25.6.3在多台计算机上分发任务 208
25.7管理僵尸网络 209
25.8进一步探讨 215
第四部分 拓展知识 219
第26章 设计隐蔽的网络机器人和蜘蛛 219
26.1设计隐蔽网络机器人的原因 219
26.1.1 日志文件 219
26.1.2日志监控软件 222
26.2模拟人类行为实现隐蔽 222
26.2.1善待资源 222
26.2.2在繁忙的时刻运行网络机器人 222
26.2.3在每天不同时刻运行网络机器人 223
26.2.4不要在假期和周末运行网络机器人 223
26.2.5使用随机的延迟时间 223
26.3结论 223
第27章 代理 226
27.1代理的概念 226
27.2虚拟世界中的代理 226
27.3网络机器人开发者使用代理的原因 226
27.3.1使用代理实现匿名 227
27.3.2使用代理改变位置 229
27.4使用代理服务器 229
27.4.1在浏览器中使用代理 229
27.4.2通过PHP/CURL使用代理 230
27.5代理服务器的类型 230
27.5.1公共代理 230
27.5.2 Tor 232
27.5.3商业代理 234
27.6结论 234
27.6.1匿名是过程,不是特性 234
27.6.2创建自己的代理服务 235
第28章 编写容错的网络机器人 236
28.1网络机器人容错的类型 236
28.1.1适应URL变化 236
28.1.2适应页面内容的变化 240
28.1.3适应表单的变化 242
28.1.4适应cookie管理的变化 243
28.1.5适应网络中断和网络拥堵 243
28.2错误处理器 244
28.3进一步探讨 245
第29章 设计受网络机器人青睐的网站 246
29.1针对搜索引擎蜘蛛优化网页 246
29.1.1定义明确的链接 246
29.1.2谷歌轰炸和垃圾索引 247
29.1.3标题标签 247
29.1.4元标签 247
29.1.5标头标签 248
29.1.6图片的alt属性 248
29.2阻碍搜索引擎蜘蛛的网页设计技巧 248
29.2.1 JavaScript 249
29.2.2非ASCⅡ内容 249
29.3设计纯数据接口 249
29.3.1 XML 249
29.3.2轻量级数据交换 251
29.3.3简单对象访问协议 253
29.3.4表征状态转移 254
29.4结论 255
第30章 消灭蜘蛛 256
30.1合理地请求 256
30.1.1创建服务协议条款 257
30.1.2使用robots.txt文件 257
30.1.3使用robots元标签 258
30.2创造障碍 258
30.2.1选择性地允许特定的网页代理 259
30.2.2使用混淆 259
30.2.3使用cookie、加密、JavaScript和重定向 259
30.2.4认证用户 260
30.2.5频繁升级网站 260
30.2.6在其他媒体中嵌入文本 260
30.3设置陷阱 261
30.3.1创建蜘蛛陷阱 261
30.3.2处理不速之客的方法 261
30.4结论 262
第31章 远离麻烦 263
31.1尊重 264
31.2版权 264
31.2.1请善用资源 264
31.2.2不要纸上谈兵 265
31.3侵犯动产 267
31.4互联网法律 268
31.5结论 269
附录A PHP/CURL参考 270
附录B 状态码 277
附录C 短信网关 280