这个爬虫的特点是主要针对动态网页信息爬取的垂直爬虫。设计思路与八爪鱼采集器类似。
目前正在完善,有些功能可能有bug,敬请期待...
动态网站的抓取和静态网站抓取最大的不同就是要解析JS。
driver 目录(存放的是selenium需要运行的driver) 不同的平台,请参考这个教程,自行编译 里面目前只是提供windows GhostDriver 已经集成在 Phantomjs.exe
简单爬取例子 在tasks\test_ghost下面的配置文件分别举例说明如何配置爬虫抓取各种网页,下面是每个文件的说明:
jd_1product.xml 演示如何抓取一个简单商品页上的信息(商品名,动态评论数)
jd_products_comments.xml 演示如何抓取一个商品的评论(内容循环提取)
jd_shop_allproducts.cml 将演示如何循环抓取一个店铺的所有商品(翻页循环抓取)
其它任务类似,数据保存的名字,以及方式都是在配置文件中定义的。 配置好一只爬虫之后,启动程序爬虫就会自动生成需要保存的数据文件。
采用Selenium,一个最大的限制是多线程的并发控制。 最好的方式是采用WebDriver单例模式。采用Spring框架可以容易实现。
垂直网络爬虫不仅仅只是下载页面,下载页面只是它的一个组件。
还需要针对性的页面进行处理,比如:
在页面上点击一个按钮(本质是执行一段JS);
在页面上跳转直接(比如:加载一个新的页面)
碰到特殊情况处理(比如:弹出验证码输入框,提取不到页面内容等等)
页面内容提取(包括链接,以及主题指标数据)
如何保存批量提取的链接?
垂直爬虫得到的链接比较少量。
如何增量爬取数据?
如何解决爬虫被封的问题?
这些过程抽象出来,非常符合编程语言里面的三大程序流程结构:
由这三个组合起来就可以完成任何复杂的程序流程。
一个垂直网站的爬取,也可以用上面的三个过程组合起来进行描述: 比如在爬取一个网站的时候:
do for 循环列表页(循环方式 点击下一页,结束条件(指定最大次数等))
do for 每一个内容页面(循环方式 依次抓取,结束条件)
提取信息(异步提取,同步提取)
done
点击下一页
done
比如更加复杂一点的网站:
do
填写表单,点击提交,指定页面跳转
done
do then
do 循环列表页(循环方式 点击下一页,结束条件(指定最大次数等))
提取信息
done
do then
点击某个按钮
do
do for 循环内容
提取信息(
if (未提取到信息,或者提取到信息有什么问题)
dosome
endif
done
done
点击按钮
done
done
基于这样的逻辑,开发了这个系统。
判断(需要判断条件,符合就执行,不符合就执行另外的)
循环(需要开始条件,循环间隔,循环结束条件)
顺序(就是一系列执行下去)
判断(需要判断条件,符合就执行,不符合就执行另外的)
循环(需要开始条件,循环间隔,循环结束条件)
顺序(就是一系列执行下去)
点击下一页(是否存在点击下一页这个按钮,没有怎么办?)
点击某个按钮加载一段新页面(是否存在需要这个按钮,没有怎么办?)
跳转到一个新的页面(新页面链接是否是有效链接?)
(上面的每一个动作里面包含原子动作,执行某个点击按钮的动作)
上面每一个处理过程都是嵌套的,也就是说可能循环里面有判断,判断里面有循环等等 ####而且相对于爬虫来说: ####上面的每一个处理过程,都必须打开一个页面作为基准。
业务逻辑处理器里面包含转移动作组合
转移动作组里面包含系列内容抽取器
内容抽取器里面可能包含业务逻辑组
1) 单独爬取一个网站,需要的组件
顺序执行处理器1(
跳转到一个新页面的转移动作(
顺序抽取器(多个单元抽取器,去重保存组件)
)
)
2) 登录页面抓取
顺序执行处理器2(
登录动作组(无抽取动作)
顺序执行处理器1
)
3) 循环页面抓取
循环执行处理器2(
循环初始化条件
循环执行动作(抽取器)
循环结束条件
)
4) 页面点击抓取
顺序执行处理器3(
跳转到一个新页面的转移动作(
顺序抽取器(多个单元抽取器,去重保存组件)
)
点击页面按钮动作组(
顺序抽取器(多个单元抽取器,去重保存组件)?
)
)
这上面四种情况组合起来还能组合成更加复杂的情况。 抽象处理就是:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。