学习PHP爬虫--《Webbots、Spiders和Screen Scrapers:技术解析与应用实践(原书第2版)》

时间:2023-03-08 20:04:15

《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