`
zfj.rails
  • 浏览: 45001 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

爬虫源码公开之一 -- 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
  end

end
分享到:
评论
22 楼 cangbaotu 2016-05-26  
分享一些github上的爬虫源码:https://github.com/ShenJianShou/crawler_samples
21 楼 zfj.rails 2011-06-02  
macrotea 写道
为什么国人总这样
人家好心发表自己的帖子,发表自己的知识
如果你碍眼大可以关闭当前页面
没有必要打击

退一万步,即使楼主发的东西不好,但是有碍于你吗
每个人的层次不同,没有必要谩骂与打击
倘若你真牛人,请把个人资料补全.


谢谢支持哈。
20 楼 macrotea 2011-06-02  
为什么国人总这样
人家好心发表自己的帖子,发表自己的知识
如果你碍眼大可以关闭当前页面
没有必要打击

退一万步,即使楼主发的东西不好,但是有碍于你吗
每个人的层次不同,没有必要谩骂与打击
倘若你真牛人,请把个人资料补全.
19 楼 aa87963014 2011-06-02  
被骂就被骂呗

发的一堆垃圾

标题是源码公布OOXX

主帖只有几行代码

跟帖还以为会贴些什么东西结果去分析人家soso的参数。

本来还以为会有什么下载地址或者其他说明什么的

结果就over了
18 楼 D04540214 2011-06-02  
好东西,不过已经对爬虫不敢兴趣! 维护了一年多的爬虫项目,小爬虫就不在眼里
17 楼 jerry 2011-06-02  
那你为什么不放在这个贴里呢?好好整理一下。
16 楼 Hooopo 2011-06-01  
zfj.rails 写道
易卡螺丝君 写道
这种渣文 还没被隐藏吗?


不好意思。从你的发言我们大家就已经可以获取到你的很多信息了。

1、你技术这一块完全是垃圾,不懂得尊重别人的人,注意一辈子一事无成。

2、你现在没钱、没地位、工作也不咋地,不然你一天到晚哪来那么多咆哮。

3、现实生活中的你,完全没有成就感可言,整天就生活在谩骂和讽刺别人的无聊世界当中。

支持LZ,这三点总结的非常好~
15 楼 zfj.rails 2011-06-01  
nepalon 写道
要开源就爽快点嘛。


我已经把所有的代码都放出来了呀。只是不在这个帖子里
14 楼 nepalon 2011-06-01  
要开源就爽快点嘛。
13 楼 longlongriver 2011-06-01  
zfj.rails 写道
易卡螺丝君 写道
这种渣文 还没被隐藏吗?


不好意思。从你的发言我们大家就已经可以获取到你的很多信息了。

1、你技术这一块完全是垃圾,不懂得尊重别人的人,注意一辈子一事无成。

2、你现在没钱、没地位、工作也不咋地,不然你一天到晚哪来那么多咆哮。

3、现实生活中的你,完全没有成就感可言,整天就生活在谩骂和讽刺别人的无聊世界当中。


LZ很敏感啊...
12 楼 glamey 2011-06-01  
openFox 写道
zfj.rails 写道
易卡螺丝君 写道
这种渣文 还没被隐藏吗?


不好意思。从你的发言我们大家就已经可以获取到你的很多信息了。

1、你技术这一块完全是垃圾,不懂得尊重别人的人,注意一辈子一事无成。

2、你现在没钱、没地位、工作也不咋地,不然你一天到晚哪来那么多咆哮。

3、现实生活中的你,完全没有成就感可言,整天就生活在谩骂和讽刺别人的无聊世界当中。


LZ犀利



11 楼 openFox 2011-06-01  
zfj.rails 写道
易卡螺丝君 写道
这种渣文 还没被隐藏吗?


不好意思。从你的发言我们大家就已经可以获取到你的很多信息了。

1、你技术这一块完全是垃圾,不懂得尊重别人的人,注意一辈子一事无成。

2、你现在没钱、没地位、工作也不咋地,不然你一天到晚哪来那么多咆哮。

3、现实生活中的你,完全没有成就感可言,整天就生活在谩骂和讽刺别人的无聊世界当中。


LZ犀利
10 楼 zfj.rails 2011-06-01  
易卡螺丝君 写道
这种渣文 还没被隐藏吗?


不好意思。从你的发言我们大家就已经可以获取到你的很多信息了。

1、你技术这一块完全是垃圾,不懂得尊重别人的人,注意一辈子一事无成。

2、你现在没钱、没地位、工作也不咋地,不然你一天到晚哪来那么多咆哮。

3、现实生活中的你,完全没有成就感可言,整天就生活在谩骂和讽刺别人的无聊世界当中。
9 楼 zfj.rails 2011-06-01  
cxh116 写道
可以的话  可以告诉一下主要用到那些插件,比如抓取插件,HTML解析插件等


gem 'rails', '~> 3.0.7'
gem 'rake', '~> 0.8.7'
gem 'json'
gem 'mysql'
gem 'mechanize'
gem 'nokogiri'
gem 'will_paginate', '~> 3.0.pre2'

我整个应用的gem就这么多了哈。
8 楼 易卡螺丝君 2011-06-01  
这种渣文 还没被隐藏吗?
7 楼 cxh116 2011-06-01  
可以的话  可以告诉一下主要用到那些插件,比如抓取插件,HTML解析插件等
6 楼 chloerei 2011-06-01  
这个主题里代码只有一个Rakefile,我被雷到了。

想开源可以放到github上去,然后写readme和wiki
5 楼 zfj.rails 2011-06-01  
【Wenwen::ListSpider】

【Wenwen::DetailSpider】

【Discuz::Tool】

这三个模块,还是分别用新帖子讲吧。内容太多了。
4 楼 zfj.rails 2011-06-01  
之前写的时候,并没有在保存id之前就进行判断,而是在第二个爬虫请求具体某个问答页面的时候再判断的,这不科学,很浪费时间。
3 楼 zfj.rails 2011-06-01  
数据库方面:

数据库名:z_id86
表名:log_wenwen_list

当时取这个名字的时候没多想,之前这数据库就一张表log_add_user 用来记录ruby的用户添加日志,所以也就随便取了这个名字了。

use z_id86;

DROP TABLE IF EXISTS `log_wenwen_list`;
CREATE TABLE `log_wenwen_list` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `keyword` varchar(100) NOT NULL DEFAULT '',
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB;

以 "http://wenwen.soso.com/z/Search.e?sp=Sruby" 为例
第一页是:

“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进行一下判断。

相关推荐

Global site tag (gtag.js) - Google Analytics