0102节网络信息主动获取与处理爬虫_第1页
0102节网络信息主动获取与处理爬虫_第2页
0102节网络信息主动获取与处理爬虫_第3页
0102节网络信息主动获取与处理爬虫_第4页
0102节网络信息主动获取与处理爬虫_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

信息内容平安王佰灵网络技术研究所哈尔滨工业大学(威海)技术Email:wbl@第3章网络信息主动获取与处理搜索引擎体系结构网络爬虫技术网络信息存储与搜索网络信息噪音处理网络搜索应用技术搜索引擎体系结构下载模块网页库预处理模块索引模块索引库查询模块展示模块搜索引擎关键技术下载模块爬虫:Cralwer、Robot、Spider预处理模块去除噪音信息析取索引模块分词、去停用词正排索引、倒排索引去重查询与展示模块搜索引擎执行过程第3章网络信息主动获取与处理搜索引擎体系结构网络爬虫技术网络信息存储与搜索网络信息噪音处理网络搜索应用技术本节内容如何从网络中收集数据?BuildaCrawlerHighPerformanceWebCrawlerDistributedCrawling/IncrementalCrawlingState-of-arttechnology7CCF-ADLatZhengzhouUniversity,June25-27,2023BuildCrawlers!链接是哪些?RefertoHTML4.01SpecificationRefertoRFC2616HTTPMadeReallyEasyGETMethodinHTTP怎样搜集?<href…><href…><href…><href…><href…><href…><href…>网页为节点网页中的HyperLink为有向边Crawl==图遍历,right?系统框图FrontierFetcherExtractorWriterPostProcessorPreProcessorWebCoreAlgorithmsIPROCEDURESPIDER1(G) LetROOT:=anyURLfromG InitializeSTACK<stackdatastructure> LetSTACK:=push(ROOT,STACK) InitializeCOLLECTION<bigfileofURLpairs>

WhileSTACKisnotempty,

URLcurr:=pop(STACK) PAGE:=look-up(URLcurr) STORE(<URLcurr,PAGE>,COLLECTION)

Forevery

URLi

in

PAGE, push(URLi,STACK)

ReturnCOLLECTION重复搜集,遇到回路会无限循环G如果不连通呢?G如果大到STACK容纳不下呢?要控制搜集G的一局部呢?AMoreCompleteCorrectAlgorithmPROCEDURESPIDER4(G,{SEEDS}) InitializeCOLLECTION<bigfileofURLpairs>

InitializeVISITED<bighash-table>

ForeveryROOTinSEEDS InitializeSTACK<stackdatastructure> LetSTACK:=push(ROOT,STACK)

WhileSTACKisnotempty,

Do

URLcurr:=pop(STACK)

Until

URLcurrisnotinCOLLECTION

insert-hash(URLcurr,VISITED)

PAGE:=look-up(URLcurr) STORE(<URLcurr,PAGE>,COLLECTION)

Forevery

URLi

in

PAGE, push(URLi,STACK) ReturnCOLLECTIONUntil

URLcurrisnotinVISITED

STACK用disk-basedheap结构实现还存在什么问题呢?Web规模在不断增长,容量巨大必须具备高效率1billionpages/permonth385pages/secCrawler系统的瓶颈在哪里?加更多收集机器是否能解决问题?在I/O局部,look-up(),Store()特别是需要提高网络带宽利用率当数据量大到那些datastructure不能够在内存中放下时优化IsurlorpagesVISITED还存在什么问题呢?Therealworldisnotperfect镜像与重复网页(mirrorsandduplications)url/html语法错误效劳器陷阱(servertraps)效劳器抱怨法律问题系统崩溃停电…不同url指向的同一个网页IP地址和域名之间的多对多关系大规模网站用于负载平衡的技术:内容镜像“virtualhosting〞和“Proxypass〞:不同的主机名映射到同一个IP地址,发布多个逻辑网站的需要〔Apache支持〕动态网页的参数Sessionid上一页/下一页有多少个ip地址?&nonsense=1URL不唯一性对URL进行规格化用一个标准的字符串表示协议()利用canonical主机名字查DNS会返回IP和一个canonical名字显式加上一个端口号〔80也加上〕规格化并清理好文档路径例如将/books/../papers/sigmod1999.ps写成/papers/sigmod1999.psGoogle、Yahoo、Mircrosoft三大搜索引擎在09年初宣布支持Link标签的一个新属性Canonical如:<linkrel="canonical"href="authoritative|canonicalURL"/>Robotexclusion检查在效劳器文档根目录中的文件,robots.txt,包含一个路径前缀表,crawlers不应该跟进去抓文档,例如#AltaVistaSearchUser-agent:AltaVistaIntranetV2.0W3CWebreqDisallow:/Out-Of-Date#excludesomeaccess-controlledareasUser-agent:*Disallow:/TeamDisallow:/ProjectDisallow:/Systems限制只是对crawlers,一般浏览无妨“君子协定〞〔你的crawler可以不遵守〕Servertraps防止系统异常病态HTML文件例如,有的网页含有68kBnull字符误导Crawler的网站用CGI程序产生无限个网页用软目录创立的很深的路径HTTP效劳器中的路径重映射特征WebCrawlerneed…快FastBottleneck?Networkutilization可扩展性ScalableParallel,distributed友好性PoliteDoS〔DenyofServiceAttack〕,robot.txt健壮RobustTraps,errors,crashrecovery持续搜集ContinuousBatchorincremental时新性FreshnessHighPerformance

WebCrawler系统框图FrontierFetcherExtractorWriterPostProcessorPreProcessorWebFrontierFetcherWriterExtractor大规模WebCrawler的

一种结构图大规模WebCrawler的

一种结构图TypicalDNSrequestaresynchronized!DNScantakelongtimetoresolvehostnamesHostnamemayneverresolve问题:同步和异步,阻塞和非阻塞调用是?DNSresolverDNS解析如果不采取措施,DNS地址解析会成为一个重要的瓶颈局域网中,DNS效劳器通常较小,对付几百个工作站的常规操作没问题,但一个crawler产生的压力大很多通常的DNS解析系统调用是同步调用〔synchronized〕防止同时从一个效劳器抓许多网页也使DNS的cache能力发挥不出来怎样提高DNS解析模块的性能?并发DNSclient缓存cachednsresults预取prefechclient并发的地址解析client一般系统〔例如UNIX〕提供的DNSclient没有考虑cralwer的需求,带来两个问题:以gethostbyname()为根底,它不可重入非线程平安不会考虑在多个DNSserver之间分配负载。因此一个customclient很必要。专门对付多个请求的并发处理容许一次发出多个解析请求(multiplexer)协助在多个DNSserver之间做负载分配〔例如根据掌握的URL进行适当调度〕缓存效劳器〔DNSCachingServer〕大缓存容量,跨DNS系统的刷新保持内容Internet的DNS系统会定期刷新,交换更新的域名和IP的信息。普通的DNScache一般应该尊重上级DNS效劳器带来的域名“过期〞的信息,但用于爬取网页的DNScache不一定如此,以减小开销〔让缓存中有些过期的无所谓,但也要注意安排适时刷新〕映射尽量放在内存,可以考虑用一台专门的PC预取client为了减少等待查找涉及新主机的地址的时间:尽早将主机名投给DNS系统步骤分析刚得到的网页从HREF属性中提取主机名〔不是完整的URL〕向缓存效劳器提交DNS解析请求结果放到DNScache中〔后面可能有用,也可能用不上〕通常用UDP实现非连接,基于包的通信协议,不保证包的投递用不着等待解析的完成Asynchronous调用Cachesendrecvpolling/selectSendQueueAsynchronousConcurrentDNSClientrecvrecvsendsendDnsLookup()PrefetchHostName()DNSserver大规模爬取器的一种结构图Pagefetching获取一个网页需要多少时间?局域网的延迟在1-10ms,带宽为10-1000Mbps;Internet的延迟在100-500ms,带宽为0.010-2Mbps在一个网络往返时间RTT为200ms的广域网中,效劳器处理时间SPT为100ms,那么TCP上的事务时间就大约500ms〔2RTT+SPT〕网页的发送是分成一系列帧进行的,那么发送1个网页的时间量级在(13KB/1500B)*500ms≈4sProblem:networkconnectionandtransferoverheadsSolutions:Multipleconcurrentfetches?多个并发的抓取管理多个并发的连接单个下载可能需要几秒钟同时对不同的HTTP效劳器建立许多socket连接过多的硬件并行好处不大抓取的性能瓶颈主要在网络和硬盘两种根本方法用多线程/多进程用异步I/O:带事件处理的非阻塞sockets多线程方法逻辑线程〔进程〕操作系统控制的线程〔例如pthread〕,或并发进程〔地址空间别离,好处是相互干扰不大〕通常根据经验采用一个预先确定的线程数量平均4秒抓取时间下,按带宽100%利用计算,可完成4*100Mb/(8*13KB)≈4000个网页,约启动4000个线程程序设计创立一个clientsocket将该socket连接到效劳器的HTTP效劳上发送HTTP请求读socket(recv)直到没有更多的东西可读还可以是通过时间超时判断中止关闭socket通常用阻塞的系统调用〔简单;等待和计算的重叠靠并发多线程“随机〞实现〕多线程的性能代价〔performancepenalty〕内存地址空间不够互斥共享的工作数据区数据结构的并发访问,用程序的方式协调这种访问的开销可能会更大〔线程互斥,或者进程通信,都很复杂〕磁盘访问代价并发线程在完成抓取后,进行文档存储时会形成大量交叉的,随机磁盘I/O,外部表现就是磁盘不断的寻道,很慢。多线程:问题异步非阻塞socket和事件处理:单进程异步非阻塞socketsconnect,send或recv调用立刻返回,不需要等网络操作的完成〔因此可以连续给出多个〕随后可以通过polling来检查完成的状态“select〞系统调用:专门针对非阻塞socket让调用者挂起,直到数据可以通过socket读/写,或者期限超时可以同时监管多个sockets的状态,一个可用就返回select表达了更高效的存储管理:一次select返回一个socket标识网页抓取的完成不相互影响〔自然地序列化了!〕于是在共享的任务池上也不需要加锁或者信号灯!RefertoC10KProblem大规模爬取器的一种结构图消除已经访问过的URL检查某个URL是否已经被抓过了在将一个新的URL(规格化后的)放到工作池之前要很快,不要在这里形成性能瓶颈〔检查将要访问磁盘〕符合条件〔即未被访问过〕的URLs放到crawler的任务中优化方法URL用fingerprint(如MD5)来记录,减少内存开销利用访问的时空局部性--Cache海量数据的高效率查找表B-treeBloomfilterIsURLVisisted:B-tree实现一种平衡搜索树,适合基于外存的查找每个节点和磁盘的block一样大每个节点可以容纳很多key每个节点可以有很多子节点,例如1000树通常很“矮〞,于是搜索涉及的节点个数不多维护节点中数据key的有序性有助于提高查找效率顺序数据访问将有效利用I/O系统的缓存IsURLVisisted:BloomfilterBloomfilters

arecompactdatastructuresforprobabilisticrepresentationofasetinordertosupportmembershipqueries.查找集合是否包含一个元素〔查找表〕FalsePositive可由参数n(stringnumber),k(hashfunctionnumber),m(bit-arraysize)调节SimpleExampleUseabloomfilterof16bitsh1(key)=keymod16h2(key)=keymod14+2Insertnumbers27,18,29and281234567891011121314151111111Checkfor22:H1(22)=6,h2(22)=10(notinfilter)Checkfor51H1(51)=3,h2(51)=11(falsepositive)

防止在重复的网页上再提取链接检测完全重复的网页〔exactduplicates〕比照不同URL对应网页的MD5摘要〔访问一次磁盘〕或者,将相对于网页u的链接v表示为(h(u);v),其中h(u)是u的内容的散列。这样,两个别名的相同相对链接就有同样的表示,直接放到isUrlVisited中检查检测接近重复的网页〔near-duplicates〕即使是一个字符的改变也会完全改变MD5摘要例如,网页的转载常伴随有日期或者网站管理者名字的变化解决方案:Shingling〔分段〕DistributedCrawling分布式计算中央控制节点Master-Slave模式对等Peer-to-peer模式任务划分问题M个节点同时执行搜集问题:如何有效的把N个网站的搜集任务分配到M个机器上去?目标:任务分配得均匀〔Balance〕谁负责/?Hashing49从一个值均匀分布的hash

函数开始:h(name)avalue(e.g.,32-bitinteger)把values映射到hashbuckets一般取模mod(#buckets)把items放到buckets冲突,需要chain解决冲突012304812…buckets{h(x)valuesoverflowchain在机器间划分HashTable简单划分–把buckets按组分配到对应机器上去对应表可以发给用户,或者维护一个全局目录可以控制均匀分配,或者按capacity分配多少查找十分简单问题?新增加节点,节点crash,节点重新参加,机器数目变化情况下…….50Weneed…在一个分布式系统中,无需集中目录,也无需担忧节点失效的一种查找元素位置的方法ConsistentHashingBasicIdeas使用一个巨大的hashkey空间SHA-1hash:20B,or160bits把它组织成“circularring〞(在2160处回到0)我们把objects’keys(这里是URL)和nodes’IPaddresses都hash映射到一个hashkey空间“〞SHA-1K10SHA-1K12HashesaKeytoitsSuccessorN32N10N100N80N60Circularhash

IDSpacek52k30k10k70k99NodeIDk112k120k11k33k40k65KeyHashHashesaKeytoitsSuccessorN32N10N100N80N60Circularhash

IDSpacek52k30k10k70k99NodeIDk112k120k11k33k40k65KeyHashN80isdown…IncrementalCrawling问题有限的资源条件下网络带宽,存储空间Crawler系统怎样和变化的Web同步?如何估计网页变化频率,来预测其更新时间?如何度量搜集结果的优劣?按预测到的更新时间去抓取是最优策略吗?State-of-artCrawlingTechDreamofthePerfectCrawlUsersHaveHighExpectations:Coverage:EverypageshouldbefindableFreshness:Latestevent,viralvideo,...DeepWeb:ajax,flash,silverlight,SearchEnginesDreamoftheperfectcrawl:Everythingtheuserswant…butefficient:No404sNoduplicatesSitemapstotherescue...SitemapsUniqueCoveragevsDomainSi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论