1 / 25

习题课 Proj1+hw3

习题课 Proj1+hw3. LiYing Dec 2, 2009. heritrix 系统使用. 要求:配置、安装 Heritrix ,抓取指定的网站 : http://www.ccer.pku.edu.cn 限制抓取范围:修改 Modules 、 Submodules 和 Settings : Select Crawl Scope 选择 DecidingScope ; 用正则表达式完成对抓取的网页的 url 的匹配; 限定只抓取文本类型的内容, 缩短爬取时间:

gisela
Download Presentation

习题课 Proj1+hw3

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 习题课Proj1+hw3 LiYing Dec 2, 2009

  2. 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)

  3. heritrix系统使用 • 只有一个线程在工作: • 原因:Heritrix的url队列以hostname为key,所有相同key的url放置在同一个队列里面,也就是说同一个host下面的所有url都放在一个队列里面,当线程获取url时候,会将该队列放置到同步池中,拒绝其他线程访问。 • 思路:将url平均分配到Queue里面,实现更好的多线程同步, • 实现方法:采用ELF hash算法平均分配url。

  4. heritrix系统代码分析 要求:按Week2的web crawler系统结构,寻找Heritrix系统里面的crawler的下面四个部分: • page fetching • isPageKnown • isUrlVisited • Politeness 分析它们的主要数据结构和算法.写一个简短的报告文档.

  5. 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

  6. Page fetching • 算法:以FetchHTTP为例 • 判断能否抓取网页 • 预处理过程。将在抓取过程中获得的网页信息写到HttpRecorder • 根据URI创建HttpMethod,区分为POST和GET • 经过抓取网页得到的抓取内容,从中提取内容并根据选定算法计算摘要值,一般是SHA1和MD5算法,默认为SHA1。

  7. isPageKnown • Heritrix提供了三种网页去重的策略 • 策略一: • 先抓取一次网页,把URI和网页的摘要值保存到Hash表中。在第二次抓取相同URI的网页的时候,根据URI索引并比较与之前存在Hash表中的摘要值是不是相同。 • 策略二: • 是先抓取一次网页,把URI和网页的摘要值保存到Hash表中。在第二次抓取相同URI的网页的时候,根据HTTP请求返回的content-length来比较第一次记录的content-length是否有变化,如果有变化则抓取并存储网页,如果没有变化则放弃该网页。

  8. 策略三 在一个抓取过程中,把当前网页的摘要值放到Hash表里作为KEY值,如果当前网页链接到了一个相同摘要值的网页(KEY值相同)并且URI不同,就不再抓取和存储这个网页。 • 数据结构: • currentDigest:当前uri的摘要 • A_VIA_DIGEST:前一个uri的属性 • 算法: • org.archive.crawl.extractor.TrapSuppressExtractor通过注意一个网页的内容摘要是否与它的‘A_VIA_DIGEST‘内容摘要相等来判断。

  9. isUrlVisited • 作用:在将链接加入队列之前需要查看链接是否已经被处理过了。 • Heritrix中isUrlVisited 的实现有如下需求: • 支持多线程读写,大容量。 • BerkeleyDB: • 实质是一个按照”key/value”方式保存数据的HashTable。它支持两段锁技术和先写日志策略来保证数据的正确性和一致性,远比简单的HashTable 的Synchronize 强大。 • 数据库和应用程序在相同的地址空间中运行,所以不需要和应用程序进行进程间通信,节省了大量的开销,不会在isUrlVisited的阶段形成性能瓶颈。 • Heritrix 的BdbFrontier 采用了Berkeley DB 来解决问题,具体做法是将isUrlVisited 部分实现为BdbUriUniqueFilter 类。

  10. isUrlVisited • 数据结构:BdbUriUniqFilter • alreadySeen数据库: (key,value)组合,heritrix采用了将url的主机名和整个url分别计算fingerprint,以免破坏url的局部性。 • 算法: • 当使用BdbFrontier的时候,默认使用BdbUriUniqFilter作为alreadyIncluded存储url信息,可选的存储方式还有BloomUriUniqFilter等 • Heritrix调用frontier的schedule方法将任何一个url添加到alreadyIncluded中。当url添加进alreadySeen的时候,判断数据库中是否已经有相应的key存在

  11. 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 中,用以判断抓取现状,从而采取相应的动作。

  12. 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去抓取。

  13. Politeness——robots.txt(2) • RobotsDirectives: • 为每个user-agent需要维护一个允许和不允许访问的数据结构,disallows & allows记录robot.txt中对应的指令 • RobotsExclusionPolicy: • 将这些抓取内容的禁止范围的进一步设定到每一个user-agent中,在RobotsHonoringPolicy的基础上,实现最终的policy,提供一些接口函数 • 由于并不是每个网站都会存放robots.txt 这样的文件,在这种情况下Heritrix 会花上大量时间试图去访问这样一个文件,大大降低了抓取效率。因此,为了提高抓取效率,可以考虑将对robots.txt 的访问部分去除。

  14. 搜集web数据的graph link analysis 要求:回答以下问题,并给出方法的说明这个网站有多少网页?入度、出度分布情况如何?top 10的最重要页面是哪些? 方法:Pagerank方法(关于PR值收敛的判断) 网页数量:17600左右 入度、出度以及top10页面情况:基本满足power law分布的特点。

  15. 获得链接之间的链出关系的方法 • 方法一:分析crawl.log:通过观察crawl.log,可以看到url与url之间的关系。 • 从原始的log 文件取出链接的目的地址和源地址 • 从相对的链接地址得到绝对地址 • 转换utf-8 编码 • 当连接可能存在多个来源,即多个页面中都存在该链接时,crawler.log不能提供足够的信息来提供链接之间的关系。

  16. 获得链接之间的链出关系的方法 • 方法二:分析抓取得到的网页,从网页中找到链接关系。 • 一种是以网站镜像的方式存储,抓取的页面存储在jobs/mirror文件夹下,可以对抓取到的页面源码直接进行分析,解析出每一个页面的链出关系。 • 将文件名映射为链接地址。 • 一种是以arc文件的方式存储。由于arc文件中包含页面内容,可以从arc文件中提取出页面内容,再在页面内容中把它包含的链接提取出来。 • 从页面中提取链接不易实现 • 读取arc文件不易实现,虽然heritrix提供了arcreader方法,但是该方法只能读出arc文件中每个网页的元数据。

  17. 获得链接之间的链出关系的方法 • 方法三:修改Heritrix源码,在抓取过程中存储链接关系 • ExtractorHTML是在HTML页面中抽取链接,在抽取链接之后添加代码,从而将当前页面以及当前页面包含的链接以一定格式输出到文件。 • 利用heritrix抽出链接关系 • 能够控制链接关系的输出格式,从而减少后期处理工作。

  18. 文件预处理的实现 在出链中去掉不在站点内部的链接。在对没有处理的文件分析时发现很多错误网页都连接到:http://go.microsoft.com/fwlink/?LinkID=62293&IIS70Error=404,将这样的url进行删除。 若url1指向url2多次,为只指向一次。 一些入度非常高,出度却为零的url,例如http://www.ccer.pku.edu.cn/cn/event.returnValue=false,其页面是无法访问的,删除。

  19. 问题分析 • 在入度与出度的分布图中点之间分布比较分散,并没有如讲义中那样基本在一条直线上。 • 网站架构、内容的单一使得CCER在某些方面不符合web的一般特性,而且CCER站点与web的规模有很大差距。 • 邻接表 & 邻接矩阵 • Boolean的邻接矩阵 • ccer.pku.edu.cn与www.ccer.pku.edu.cn

  20. HW-week3-1 1 PPT23页的例子,矩阵C经过SVD和降维近似映射到了2维平面。请把这个过程做一遍(按PPT上的说明,使用MATLAB很方便,画图也很方便)。把5个词映射到LSI空间中,把它们的向量画出来。把查询query=(boat voyage)映射到LSI空间中去,把它的向量画出来。查询结果是什么?最后请尝试说明一下LSI空间的这两个维度dim1,dim2大概的含义。 答案要点: 把矩阵变换的过程写 出来,并且画出图来

  21. HW-week3-1(2) 通过将五个Term映射到LSI空间的公式 可以求出这五个词在LSI空间中的映射。 查询query=(boat voyage)对应的矩阵为 {0,1,0,1,0} 通过将Query映射到LSI空间的公式 可以求出这Query在LSI空间中的映射。

  22. HW-week3-1(3) 查询结果根据向量之间的点乘来计算,点乘值越大则两个向量代表的文档越相关:d1和d5应该排在前面 dim1和dim2 是比term层次更高的两个特征,可能包含了词的同义、近义等综合因素。如果Query映射的向量与某一个dim很相关(靠得很近),则表示Query与该维度聚集的那些term相关度高

  23. 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即可,词的总数可以在切词时获得

  24. HW-week3-3 3举例说明multinomial distribution和binomial distribution的关系和区别。 答案要点: 二项分布是多项分布的特例。可以给出公式,并加以描述。 举例如:抛硬币,掷骰子等等

  25. Q&A

More Related