250 likes | 448 Views
ä¹ é¢˜è¯¾ Proj1+hw3. LiYing Dec 2, 2009. heritrix 系统使用. è¦æ±‚:é…ç½®ã€å®‰è£… Heritrix ï¼ŒæŠ“å–æŒ‡å®šçš„网站 : http://www.ccer.pku.edu.cn é™åˆ¶æŠ“å–范围:修改 Modules 〠Submodules å’Œ Settings : Select Crawl Scope 选择 DecidingScope ï¼› 用æ£åˆ™è¡¨è¾¾å¼å®Œæˆå¯¹æŠ“å–的网页的 url 的匹é…ï¼› é™å®šåªæŠ“å–æ–‡æœ¬ç±»åž‹çš„内容, 缩çŸçˆ¬å–时间:
E N D
习题课Proj1+hw3 LiYing Dec 2, 2009
heritrix系统使用 • 要求:配置、安装Heritrix,抓取指定的网站: http://www.ccer.pku.edu.cn • 限制抓取范围:修改Modules、 Submodules 和Settings : • Select Crawl Scope选择DecidingScope; • 用正则表达式完成对抓取的网页的url的匹配; • 限定只抓取文本类型的内容, • 缩短爬取时间: • Profiles中setting修改 ”max-delay-ms”、”min-delay-ms”、”max-retries”、”retry-delay-seconds”的数值,提高抓取效率 • 设置-Xmx运行参数增加JVM内存(256M-1024M)
heritrix系统使用 • 只有一个线程在工作: • 原因:Heritrix的url队列以hostname为key,所有相同key的url放置在同一个队列里面,也就是说同一个host下面的所有url都放在一个队列里面,当线程获取url时候,会将该队列放置到同步池中,拒绝其他线程访问。 • 思路:将url平均分配到Queue里面,实现更好的多线程同步, • 实现方法:采用ELF hash算法平均分配url。
heritrix系统代码分析 要求:按Week2的web crawler系统结构,寻找Heritrix系统里面的crawler的下面四个部分: • page fetching • isPageKnown • isUrlVisited • Politeness 分析它们的主要数据结构和算法.写一个简短的报告文档.
Page fetching • 从Frontier获取到一个URI之后,处理链对URI进行处理,包括Prefetch,Fetch,Extract,Write,PostPrecess。其中Fetch主要是完成从web中获取网页。Heritrix提供了3种Fetch方法:FetchHTTP,FetchFTP,FetchDNS。FetchDNS 的功能主要是为当前URI 解析域名,FetchHTTP 和FetchFTP 的功能是来抓取数据。 • 数据结构: • CrawlURI 存储一个URI的相关信息 • HttpRecorder存储一次http交互过程的获取到的页面信息或文件信息。HttpRecorder 作为一个ToeThread 参数将贯穿整个Processor Chain
Page fetching • 算法:以FetchHTTP为例 • 判断能否抓取网页 • 预处理过程。将在抓取过程中获得的网页信息写到HttpRecorder • 根据URI创建HttpMethod,区分为POST和GET • 经过抓取网页得到的抓取内容,从中提取内容并根据选定算法计算摘要值,一般是SHA1和MD5算法,默认为SHA1。
isPageKnown • Heritrix提供了三种网页去重的策略 • 策略一: • 先抓取一次网页,把URI和网页的摘要值保存到Hash表中。在第二次抓取相同URI的网页的时候,根据URI索引并比较与之前存在Hash表中的摘要值是不是相同。 • 策略二: • 是先抓取一次网页,把URI和网页的摘要值保存到Hash表中。在第二次抓取相同URI的网页的时候,根据HTTP请求返回的content-length来比较第一次记录的content-length是否有变化,如果有变化则抓取并存储网页,如果没有变化则放弃该网页。
策略三 在一个抓取过程中,把当前网页的摘要值放到Hash表里作为KEY值,如果当前网页链接到了一个相同摘要值的网页(KEY值相同)并且URI不同,就不再抓取和存储这个网页。 • 数据结构: • currentDigest:当前uri的摘要 • A_VIA_DIGEST:前一个uri的属性 • 算法: • org.archive.crawl.extractor.TrapSuppressExtractor通过注意一个网页的内容摘要是否与它的‘A_VIA_DIGEST‘内容摘要相等来判断。
isUrlVisited • 作用:在将链接加入队列之前需要查看链接是否已经被处理过了。 • Heritrix中isUrlVisited 的实现有如下需求: • 支持多线程读写,大容量。 • BerkeleyDB: • 实质是一个按照”key/value”方式保存数据的HashTable。它支持两段锁技术和先写日志策略来保证数据的正确性和一致性,远比简单的HashTable 的Synchronize 强大。 • 数据库和应用程序在相同的地址空间中运行,所以不需要和应用程序进行进程间通信,节省了大量的开销,不会在isUrlVisited的阶段形成性能瓶颈。 • Heritrix 的BdbFrontier 采用了Berkeley DB 来解决问题,具体做法是将isUrlVisited 部分实现为BdbUriUniqueFilter 类。
isUrlVisited • 数据结构:BdbUriUniqFilter • alreadySeen数据库: (key,value)组合,heritrix采用了将url的主机名和整个url分别计算fingerprint,以免破坏url的局部性。 • 算法: • 当使用BdbFrontier的时候,默认使用BdbUriUniqFilter作为alreadyIncluded存储url信息,可选的存储方式还有BloomUriUniqFilter等 • Heritrix调用frontier的schedule方法将任何一个url添加到alreadyIncluded中。当url添加进alreadySeen的时候,判断数据库中是否已经有相应的key存在
Politeness——线程资源的约束 • 通过对politeness 设置阈值,Heritrix 可以使用以实现抓取对被访问服务器造成的压力的控制。 • delay-factor 再次访问服务器应当间隔上次访问服务器时间的倍数 • min-delay-ms 两次访问同一个服务器最小的时间间隔 • max-delay-ms 等待服务器响应的最大时间 • respect-crawl-delay-up-to-secs 当读取robot.txt 时推迟抓取的时间 • retry-delay-seconds 两次尝试抓取页面的时间间隔 • max-retries 链接尝试最大数 • 上述有关politeness 参数的使用集中在AbstractFrontier 中,用以判断抓取现状,从而采取相应的动作。
Politeness——robots.txt • robots.txt 声明了网站不想被robot 访问的部分。根据抓取得到的robot.txt进行文档解析,然后把文档中的内容解析并且传入的crawler的设定当中,把允许和不允许的内容和对应的agent进行比较,并且最后得到本身agent所限定或者不限定的内容。 • 数据结构: • Robotstxt: • 从robots.txt中解析出user agent、robots指示(即disallow,crawl-delay,allow)并用list和一个对应的map结构存储 • RobotsHonoringPolicy:crawler对robots尊重的5个程度 • Classic:完全尊重robot.txt的限定 • Ignore:直接跳过robot.txt的限制进行抓取 • custom:用户来定于限制的情况 • most-favored:每一个爬虫有多个user-agent,当全部agent都得到权限时才抓取 • most-favored-set:对于多个user-agent,有一个能够抓取就允许crawler去抓取。
Politeness——robots.txt(2) • RobotsDirectives: • 为每个user-agent需要维护一个允许和不允许访问的数据结构,disallows & allows记录robot.txt中对应的指令 • RobotsExclusionPolicy: • 将这些抓取内容的禁止范围的进一步设定到每一个user-agent中,在RobotsHonoringPolicy的基础上,实现最终的policy,提供一些接口函数 • 由于并不是每个网站都会存放robots.txt 这样的文件,在这种情况下Heritrix 会花上大量时间试图去访问这样一个文件,大大降低了抓取效率。因此,为了提高抓取效率,可以考虑将对robots.txt 的访问部分去除。
搜集web数据的graph link analysis 要求:回答以下问题,并给出方法的说明这个网站有多少网页?入度、出度分布情况如何?top 10的最重要页面是哪些? 方法:Pagerank方法(关于PR值收敛的判断) 网页数量:17600左右 入度、出度以及top10页面情况:基本满足power law分布的特点。
获得链接之间的链出关系的方法 • 方法一:分析crawl.log:通过观察crawl.log,可以看到url与url之间的关系。 • 从原始的log 文件取出链接的目的地址和源地址 • 从相对的链接地址得到绝对地址 • 转换utf-8 编码 • 当连接可能存在多个来源,即多个页面中都存在该链接时,crawler.log不能提供足够的信息来提供链接之间的关系。
获得链接之间的链出关系的方法 • 方法二:分析抓取得到的网页,从网页中找到链接关系。 • 一种是以网站镜像的方式存储,抓取的页面存储在jobs/mirror文件夹下,可以对抓取到的页面源码直接进行分析,解析出每一个页面的链出关系。 • 将文件名映射为链接地址。 • 一种是以arc文件的方式存储。由于arc文件中包含页面内容,可以从arc文件中提取出页面内容,再在页面内容中把它包含的链接提取出来。 • 从页面中提取链接不易实现 • 读取arc文件不易实现,虽然heritrix提供了arcreader方法,但是该方法只能读出arc文件中每个网页的元数据。
获得链接之间的链出关系的方法 • 方法三:修改Heritrix源码,在抓取过程中存储链接关系 • ExtractorHTML是在HTML页面中抽取链接,在抽取链接之后添加代码,从而将当前页面以及当前页面包含的链接以一定格式输出到文件。 • 利用heritrix抽出链接关系 • 能够控制链接关系的输出格式,从而减少后期处理工作。
文件预处理的实现 在出链中去掉不在站点内部的链接。在对没有处理的文件分析时发现很多错误网页都连接到:http://go.microsoft.com/fwlink/?LinkID=62293&IIS70Error=404,将这样的url进行删除。 若url1指向url2多次,为只指向一次。 一些入度非常高,出度却为零的url,例如http://www.ccer.pku.edu.cn/cn/event.returnValue=false,其页面是无法访问的,删除。
问题分析 • 在入度与出度的分布图中点之间分布比较分散,并没有如讲义中那样基本在一条直线上。 • 网站架构、内容的单一使得CCER在某些方面不符合web的一般特性,而且CCER站点与web的规模有很大差距。 • 邻接表 & 邻接矩阵 • Boolean的邻接矩阵 • ccer.pku.edu.cn与www.ccer.pku.edu.cn
HW-week3-1 1 PPT23页的例子,矩阵C经过SVD和降维近似映射到了2维平面。请把这个过程做一遍(按PPT上的说明,使用MATLAB很方便,画图也很方便)。把5个词映射到LSI空间中,把它们的向量画出来。把查询query=(boat voyage)映射到LSI空间中去,把它的向量画出来。查询结果是什么?最后请尝试说明一下LSI空间的这两个维度dim1,dim2大概的含义。 答案要点: 把矩阵变换的过程写 出来,并且画出图来
HW-week3-1(2) 通过将五个Term映射到LSI空间的公式 可以求出这五个词在LSI空间中的映射。 查询query=(boat voyage)对应的矩阵为 {0,1,0,1,0} 通过将Query映射到LSI空间的公式 可以求出这Query在LSI空间中的映射。
HW-week3-1(3) 查询结果根据向量之间的点乘来计算,点乘值越大则两个向量代表的文档越相关:d1和d5应该排在前面 dim1和dim2 是比term层次更高的两个特征,可能包含了词的同义、近义等综合因素。如果Query映射的向量与某一个dim很相关(靠得很近),则表示Query与该维度聚集的那些term相关度高
HW-week3-2 2 Bob(上次那个Bob)跑来感谢你,上一次建ccer网页库的inverted index,查询效果很好。谈话间,Bob问:听说现在Language Model很popular,你建的inverted index可以用来支持LM吗?你觉得呢? 答案要点: 可以用来支持LM。但只能支持Unigram Language Model,因为无法计算term之间的条件概率。 可以给出语言模型的公式,对于公式中的参数,说明如何得到,或者如何计算。 P(w|d) = Pmle(w|Md) + (1 – )Pmle(w|Mc) 例如,查询词的DF,CF信息;每篇文档中查询词的个数;查询词在文档中的TF 一个term在对应Document ID的文档中的出现概率Probability,只要用Frequency/词的总数=Probability即可,词的总数可以在切词时获得
HW-week3-3 3举例说明multinomial distribution和binomial distribution的关系和区别。 答案要点: 二项分布是多项分布的特例。可以给出公式,并加以描述。 举例如:抛硬币,掷骰子等等