php抓取网页数据插入数据库( Java爬虫框架.1-架构图那里搜网络框架)
优采云 发布时间: 2022-03-03 05:06php抓取网页数据插入数据库(
Java爬虫框架.1-架构图那里搜网络框架)
Java爬虫框架.doc
一、 架构图,其中搜索网络爬虫框架主要用于电子商务的数据爬取、分析、存储和索引网站。爬虫:爬虫负责爬取、解析、处理电子商务网站网页内容数据库:存储产品信息索引:产品全文搜索索引任务队列:要爬取的网页列表访问表:已爬取网页列表爬虫监控平台:网页平台可以启动、停止爬虫、管理爬虫、任务队列、访问表。二、 Crawler1. Process1) Scheduler 启动爬虫,TaskMaster 初始化 taskQueue2) Workers 从 TaskQueue 获取任务3) Worker 线程调用 Fetcher 来爬取 Task,如 The网页4)
什么时候戒烟?当 TaskQueue 为空时,Workers 中的所有线程都处于空闲状态。而且这种情况在规定的 10 分钟内没有改变。假设所有页面都已被爬取。程序退出。3. Task Master 任务管理器,负责管理任务队列。任务管理器抽象了任务队列的实现。l 在简单的应用中,我们可以使用内存中的任务管理器。l 在分布式平台和多台爬虫机器的情况下,我们需要一个集中的任务队列。在这个阶段,我们使用 SQLLite 作为任务队列的实现。一个替代方案是 Redis。任务管理器的处理流程: l 任务管理器初始化任务队列。任务队列的初始化可能会根据不同的配置而有所不同。在增量的情况下,它根据指定的 URL List 进行初始化。在全文爬取的情况下,只预初始化一个或几个电子商务网站主页。l 任务管理器创建一个监控线程来控制整个程序的退出。l 任务管理器调度任务。如果任务队列是持久的,它负责从任务队列服务器加载任务。需要考虑预取。l 任务管理器还负责验证任务的有效性。爬虫监控平台能否将任务队列中的部分任务设置为无效?4. WorkersWorker线程池,每个线程都会执行整个爬取过程。考虑使用多个线程池来异步拆分整个进程。主页已预先初始化。l 任务管理器创建一个监控线程来控制整个程序的退出。l 任务管理器调度任务。如果任务队列是持久的,它负责从任务队列服务器加载任务。需要考虑预取。l 任务管理器还负责验证任务的有效性。爬虫监控平台能否将任务队列中的部分任务设置为无效?4. WorkersWorker线程池,每个线程都会执行整个爬取过程。考虑使用多个线程池来异步拆分整个进程。主页已预先初始化。l 任务管理器创建一个监控线程来控制整个程序的退出。l 任务管理器调度任务。如果任务队列是持久的,它负责从任务队列服务器加载任务。需要考虑预取。l 任务管理器还负责验证任务的有效性。爬虫监控平台能否将任务队列中的部分任务设置为无效?4. WorkersWorker线程池,每个线程都会执行整个爬取过程。考虑使用多个线程池来异步拆分整个进程。它负责从任务队列服务器加载任务。需要考虑预取。l 任务管理器还负责验证任务的有效性。爬虫监控平台能否将任务队列中的部分任务设置为无效?4. WorkersWorker线程池,每个线程都会执行整个爬取过程。考虑使用多个线程池来异步拆分整个进程。它负责从任务队列服务器加载任务。需要考虑预取。l 任务管理器还负责验证任务的有效性。爬虫监控平台能否将任务队列中的部分任务设置为无效?4. WorkersWorker线程池,每个线程都会执行整个爬取过程。考虑使用多个线程池来异步拆分整个进程。
提高线程利用率。5. FetcherFetcher 负责直接爬取电子商务网站 网页。使用 HTTP 客户端实现。HTTP core 4及以上已经有NIO功能,都是用NIO实现的。Fetcher 可以配置是否保存 HTML 文件 6. ParserParser 解析 Fetcher 获取的网页,一般网页可能格式不好(XHTML 格式完美),所以无法被 XML 类库处理。我们需要一个好的 HTML 解析器来修复这些格式不佳的页面。熟悉的第三方工具包括 TagSoup、nekohtml 和 htmlparser。tagsoup 和 nekohtml 可以使用 SAX 事件流式传输 HTML,从而节省内存。已知哪些第三方框架用作其解析器?l Nutch:官方支持的tagsoup、nekohtml,这两个是通过配置选择的 l Droids:使用nekohtml,Tikal Tika:tagsoup 据说tagsoup的可靠性比nekohtml好,nekohtml的性能也比tagsoup好。nekohtml 在可靠性和性能方面优于 htmlparser。
具体结论还需进一步检验。我们还支持 dom 结构的正则表达式、html 解析器。我们可以在使用中组合它们。进一步,我们需要研究文档比较器,同时我们需要保存爬取的网站的HTML。这可以通过语义指纹或 simhash 来实现。只有在处理大量数据时才需要它。如果两个 HTML 被认为是相同的,则不再对其进行解析和处理。7.HandlerHandler就是处理Parser解析的内容。回调方法(访问者):对于SAX事件处理,我们需要将handler适配到sax的content handler上。作为解析器的回调方法。从不同事件解析出来的内容可以存储在HandlingContext中。最后由 Parser 一起返回。主动方式:您需要解析整个 HTML 并选择您需要的内容。处理 Parser 提取的内容。XML 需要被解析成 DOM 结构。使用方便,可以使用Xpath、nodefilter等,但是比较消耗内存。ContentHandler:它还收录组件ContentFilter。过滤内容。URLExtractor 负责从网页中提取符合格式的 URL,将 URL 构造成 Task,并提交到 Task 队列中。
8. VisitedTableManager 访问表管理器来管理访问的 URL。提取统一接口,抽象底层实现。如果 URL 被抓取,它不会被添加到 TaskQueue。三、 任务队列任务队列存储需要爬取的任务。任务是相关的。我们可以保存和管理这个任务关系。这种关系也是 URL 之间的关系。保存它,有助于在后台形成网络图表并分析数据。任务队列存储在分布式爬虫集群中,需要存储在集中式服务器上。一些支持列表的轻量级数据库或 NoSql 可用于存储。替代方案: l 用SQLLite存储:需要不断的插入和删除,不知道性能如何。l 使用Redis存储四、 已访问表 已访问表存储已爬网的 网站。每次爬网都需要构建。l SQLLite存储:需要动态创建表,需要不断查询、插入,需要后台定时清理。不知道演技怎么样。l Mysql内存表哈希索引 l Redis:key值,设置过期时间 l Memcached:key值,value为bloomfilter的值 对于当前数据量,可以使用SQLLite五、爬虫监控管理平台 l 启动、停止爬虫,监控每个爬虫的状态 l 监控,管理任务队列,访问表 l 配置爬虫 l 管理爬虫爬取的数据。需要不断的查询、插入,需要在后台定期清理。不知道演技怎么样。l Mysql内存表哈希索引 l Redis:key值,设置过期时间 l Memcached:key值,value为bloomfilter的值 对于当前数据量,可以使用SQLLite五、爬虫监控管理平台 l 启动、停止爬虫,监控每个爬虫的状态 l 监控,管理任务队列,访问表 l 配置爬虫 l 管理爬虫爬取的数据。需要不断的查询、插入,需要在后台定期清理。不知道演技怎么样。l Mysql内存表哈希索引 l Redis:key值,设置过期时间 l Memcached:key值,value为bloomfilter的值 对于当前数据量,可以使用SQLLite五、爬虫监控管理平台 l 启动、停止爬虫,监控每个爬虫的状态 l 监控,管理任务队列,访问表 l 配置爬虫 l 管理爬虫爬取的数据。
在并发的情况下,很难保证同一个item不会被重复爬取。爬取完成后,可以通过爬虫监控管理平台手动去重。一、 模块1. SchedulerScheduler 负责启动爬虫,停止爬虫,监控爬虫的状态。Scheduler 在调度爬虫时,在 Quartz 的帮助下,设置爬虫在某个时间启动。同名爬虫是有状态的。任务:初始化任务。Trigger:触发器,描述何时触发爬虫。开放Scheduler远程API,可以通过爬虫配置管理平台对爬虫进行管理和监控。2. Task MasterTaskMaster:管理Task的执行过程,将Task提交给WorkerThreadPool执行。TaskController:独立线程,控制何时停止TaskMaster、DelayController及其自身ExecutionState:描述TaskMaster的当前状态TaskQueue:存放所有未爬取的任务。可以是基于内存的或持久的。不同的实现。DelayTaskQueue:对于一些网站,连续访问会禁止爬取。在这种情况下,我们将暂时停止对网页的抓取。我们需要一个 DelayTaskQueue 来存储延迟的任务。我们将暂时停止抓取该网页。我们需要一个 DelayTaskQueue 来存储延迟的任务。我们将暂时停止抓取该网页。我们需要一个 DelayTaskQueue 来存储延迟的任务。
DelayController:一个独立的线程,不断检测DelayTaskQueue中的Task是否超过了limit period。限制期过后,移入TaskQueue等待爬取任务:描述一个爬取任务。HTMLTask:Web爬取任务 DBTask:DB爬取任务 DelayPolicy:定义Task的延迟策略,比如对同域名的网站每5秒爬一次。如果发现被限制,对同域名的网站采取10分钟暂停策略。考虑到未来对数据爬虫的支持,对统一接口进行了抽象。数据库有自己的 Task、Fetcher、parser、Handler 和 Worker 实现。3. Fetcher 页面的直接爬虫。根据传入的Task,爬取对方的网页。WebFetcher 抓取的网页直接作为输入流回。HTTPClientFetcher:用HTTPClient4.0实现的WebFetcher,底层使用java NIO。4.WorkerWorker负责Task的具体执行,从爬取到处理。TaskMaster 将 Worker 提交给线程池,有一个线程池来调度并发执行。Worker:整个爬取的执行流程 HTMLWorker:处理HTML页面的爬取WorkerThreadPool:Worker使用的线程池WorkerProcessor:Listener。有一个线程池来安排并发执行。Worker:整个爬取的执行流程 HTMLWorker:处理HTML页面的爬取WorkerThreadPool:Worker使用的线程池WorkerProcessor:Listener。有一个线程池来安排并发执行。Worker:整个爬取的执行流程 HTMLWorker:处理HTML页面的爬取WorkerThreadPool:Worker使用的线程池WorkerProcessor:Listener。
在工作人员执行之前和之后调用。可以做一些日志记录、错误处理等。 5. ParserParser 将爬取的内容解析成标准化的数据格式,提取有用的信息,方便系统进一步处理。Parser:将传入的内容解析为Data,或者在解析时使用传入的handler调用handler。数据:Parser 解析的数据结构 Content:ContentRegex Parser from Fetcher:定期匹配传入的字符串,提取出想要的字符串。SaxParser:DomParser主要通过回调实现:将XML转换为Document并返回HTMLParser:组合模式,可以使用RegexParser、DomParser等来完成任务。ParseContext:传递给 Parser 的上下文。可用于扩展。6. FilterFilter 可以过滤解析后的新任务。7. HandlerHandler对解析后的内容进行进一步处理,异步处理和爬取解析。处理主要是对爬取的数据进行存储和索引。一、 任务队列 任务队列,存放未处理的新任务。二、 Visited table 对Visited table的判断其实是TaskFilter的一种,但是TaskFilter使用VisitedTable来存储已经爬取的任务。VisitedTaskFilter:判断Task是否被处理VisitedTable:存放已经爬取的任务 访问表访问表的判断其实是一种TaskFilter,但是TaskFilter使用VisitedTable来存储已经爬取的任务。VisitedTaskFilter:判断Task是否被处理VisitedTable:存放已经爬取的任务 访问表访问表的判断其实是一种TaskFilter,但是TaskFilter使用VisitedTable来存储已经爬取的任务。VisitedTaskFilter:判断Task是否被处理VisitedTable:存放已经爬取的任务