学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》
《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》
译者序
前言
第一部分 基础概念和技术
第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 cookie19
3.3.5 重定向19
3.3.6 代理名称欺诈19
3.3.7 上链管理20
3.3.8 套接字管理20
3.4 安装PHP/CURL20
3.5 LIB_http库21
3.5.1 熟悉默认值21
3.5.2 使用LIB_http21
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
第二部分 网络机器人项目
第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_codes96
10.2.2 LIB_resolve_addresses96
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 API107
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和FTP118
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 电子邮件、网络机器人以及垃圾邮件127
15.2 使用SMTP和PHP发送邮件128
15.2.1 配置PHP发送邮件128
15.2.2 使用mail()函数发送电子邮件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
第三部分 高级设计技巧
第17章 蜘蛛145
17.1 蜘蛛的工作原理145
17.2 蜘蛛脚本示例146
17.3 LIB_simple_spider149
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/CURL163
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和cookie177
21.3 网络机器人设计中面临的cookie难题178
21.3.1 擦除临时性cookie178
21.3.2 管理多用户的cookie178
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 AJAX190
23.1.2 怪异的JavaScript和cookie行为190
23.1.3 Flash190
23.2 使用浏览器宏解决网页抓取难题191
23.2.1 浏览器宏的定义191
23.2.2 模拟浏览器的终极网络机器人191
23.2.3 安装和使用iMacros191
23.2.4 创建第一个宏192
23.3 结论197
23.3.1 宏的必要性197
23.3.2 其他用途197
第24章 修改iMacros198
24.1 增强iMacros的功能198
24.1.1 不使用iMacros脚本引擎的原因198
24.1.2 创建动态宏199
24.1.3 自动装载iMacros202
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
第四部分 拓展知识
第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 Tor232
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 JavaScript249
29.2.2 非ASCII内容249
29.3 设计纯数据接口249
29.3.1 XML249
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
学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》的更多相关文章
- ROS机器人程序设计(原书第2版)学习镜像分享及使用说明
ROS机器人程序设计(原书第2版)学习镜像分享及使用说明 系统用于ROS爱好者学习交流,也可用于其他用途,并不局限于ROS. 这款镜像文件是基于一年前的Ubuntu ROS Arduino Gazeb ...
- c++学习书籍推荐《面向对象程序设计:C++语言描述(原书第2版)》下载
百度云及其他网盘下载地址:点我 <面向对象程序设计:C++语言描述(原书第2版)>内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编 ...
- 学习《Oracle PL/SQL 实例讲解 原书第5版》----创建账户
通过readme.pdf创建student账户. 以下用sys账户登录时都是sysdba. 一.PL/SQL 登录oracle. SYS/123 AS SYSDBA 账户名:sys:密码:123:作 ...
- C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载
维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...
- C语言学习推荐《C语言参考手册(原书第5版)》下载
- PHP和MySQL.Web开发(原书第4版)学习盲点笔记
1.浏览器输出中文乱码解决: <?php header("Content-type: text/html; charset=utf-8"); ?> 相当于html中的: ...
- 学习《Oracle PL/SQL 实例讲解 原书第5版》---创建student schema
接上篇,运行脚本createStudent.sql后结果不符. 又运行了一遍rebuildStudent.sql就好了. 图: 原来是这样的,还以为是语言问题: 额,本来是打算截图的.但是发现没问题了 ...
- 学习TF:《TensorFlow技术解析与实战》PDF+代码
TensorFlow 是谷歌公司开发的深度学习框架,也是目前深度学习的主流框架之一.<TensorFlow技术解析与实战>从深度学习的基础讲起,深入TensorFlow框架原理.模型构建. ...
- 【Python】【爬虫】如何学习Python爬虫?
如何学习Python爬虫[入门篇]? 路人甲 1 年前 想写这么一篇文章,但是知乎社区爬虫大神很多,光是整理他们的答案就够我这篇文章的内容了.对于我个人来说我更喜欢那种非常实用的教程,这种教程对于想直 ...
随机推荐
- C#基础知识学习手记1
这篇随笔主要用来记录我在C#学习过程做的笔记,算作是一门课程中的小知识点吧. 1. 变量和表达式 1.1 如何在输出带有引号(英文双引号.英文单引号)以 ...
- 动态添加DOM时,绑定的click事件会重复执行
最近因为业务需求,需要重写window的alert和confirm弹窗,但是每次显示的提示按钮不相同,所有每次打开的弹窗都需要重写生成,但是对于相同的按钮会保留上次创建时的click事件,所以当你创建 ...
- Python 3. 里filter与generator expression的区别
# -*- coding: utf-8 -*- """ A test to show the difference between filter and genrator ...
- Install Package and Software
svn http://tortoisesvn.sourceforge.net/ git https://download.tortoisegit.org/ http://git-for-windows ...
- uva 11270 - Tiling Dominoes(插头dp)
题目链接:uva 11270 - Tiling Dominoes 题目大意:用1∗2木块将给出的n∗m大小的矩阵填满的方法总数. 解题思路:插头dp的裸题,dp[i][s]表示第i块位置.而且该位置相 ...
- 关于EF中ApplyCurrentValues和ApplyOriginalValues区别
关于EF中ApplyCurrentValues和ApplyOriginalValues区别:两者都是编辑数据时使用. // // 摘要: // 将 System.D ...
- 【Servlet】Servlet应用的get、post访问及和JSP的配合使用
Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面. 它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用 ...
- php位运算的应用(转)
在实际应用中可以做用户权限的应用 我这里说到的权限管理办法是一个普遍采用的方法,主要是使用到”位运行符”操作,& 位与运算符.| 位或运行符.参与运算的如果是10进制数,则会被转换至2进制数参 ...
- Android(java)学习笔记158:Java程序入口和Android的APK入口
1.Java程序的入口:static main()方法 public class welcome extends Activity { @Override public void onCreate(B ...
- 骑士飞行棋 C#代码详解
最近看见一个骑士飞行棋的小游戏代码,感觉这个代码中将大多数C#的基础知识都运用到了,是一个新手检验学习成果的有效方法,特此将这个代码整理一遍.这是一个控制台程序.这是代码下载地址,代码中的注释非常详细 ...