爬虫源码公开之一 -- wenwen.rake
wenwen.rake
# == Synopsis## wenwen rake all in one.## == Author# fujun# 2011.05.08## == Copyright# Copyright (c) 2010 id86 Inc.# All rights reserved.## Usage: rake wenwen:***WENWEN_PATH = File.join(Rails.root.to_s, 'lib', 'spider', 'wenwen')namespace :wenwen do desc "list spider." task :list_spider => [:environment] do require File.join(WENWEN_PATH, 'list_spider') Wenwen::ListSpider.new().run end desc "detail spider." task :detail_spider => [:environment] do require File.join(WENWEN_PATH, 'detail_spider') Wenwen::DetailSpider.new().run endend第一页是:
“Ruby 搜搜百科” -- http://baike.soso.com/ShowLemma.e?sp=l58776 --这个对我没用,直接无视掉
“Ruby和Java有什么关系么? - 精华知识” -- http://wenwen.soso.com/z/q185733709.htm
“Ruby和java” -- http://wenwen.soso.com/z/q238993261.htm
... ...
规律自然就出来了
id -- 用来保存结果页中 "http://wenwen.soso.com/z/q185733709.htm"。字母“q”后面的那一长串数字,这个也是soso的id。
keyword -- 用来将你输入的关键字进行归类,比如:"javascript什么", "javascript怎么", "javascript表单"这一类比较火的关键字,当他的结果集远远大于500的时候,soso就不会全部将结果都列出来。怎么办?只有不断地细化你的关键字,但这些细化出来的关键字,都将会归到"javascript"这个key_word下面,这样才能保证这些文章都将被发布在
"http://www.id86.com/forum-36-1.html"。这个 "js" 版块下面。
当初写这个爬虫的时候,本应该多一个步骤判断抽出来的文章标题subject是否含有你搜索用的关键字,然后再决定是否保存这个id,这样可以大大减少不相关文章的数量,要让人工去审核,这是绝不可能的。
因为soso的sphinx是用的content去build结果集的。最多500条记录,一页10条,也就是最多只有50页,这肯定是出于性能考虑的。
一来呢,如果全结果集sphinx的话,他build的时候会比较长,最主要的还是去search的时候,需要消耗大量的时间去抽这些匹配到的结果。特别是像js css html这一类关键字,那结果集是相当的庞大。
在搜索像"ruby"这种不是很火的关键字的时候,你会发现,他的结果集只有233项,并且从15页开始,标题里就已经不含"ruby"这个关键字了,那内容更是与我们想要的"ruby"差之甚远了。所以保存这个id之前应该对subject进行一下判断。
17 楼 jerry 2011-06-02 那你为什么不放在这个贴里呢?好好整理一下。 18 楼 D04540214 2011-06-02 好东西,不过已经对爬虫不敢兴趣! 维护了一年多的爬虫项目,小爬虫就不在眼里 19 楼 aa87963014 2011-06-02 被骂就被骂呗
发的一堆垃圾
标题是源码公布OOXX
主帖只有几行代码
跟帖还以为会贴些什么东西结果去分析人家soso的参数。
本来还以为会有什么下载地址或者其他说明什么的
结果就over了 20 楼 macrotea 2011-06-02 为什么国人总这样
人家好心发表自己的帖子,发表自己的知识
如果你碍眼大可以关闭当前页面
没有必要打击
退一万步,即使楼主发的东西不好,但是有碍于你吗
每个人的层次不同,没有必要谩骂与打击
倘若你真牛人,请把个人资料补全. 21 楼 zfj.rails 2011-06-02 macrotea 写道为什么国人总这样
人家好心发表自己的帖子,发表自己的知识
如果你碍眼大可以关闭当前页面
没有必要打击
退一万步,即使楼主发的东西不好,但是有碍于你吗
每个人的层次不同,没有必要谩骂与打击
倘若你真牛人,请把个人资料补全.
谢谢支持哈。