技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 用Hyer来进行网站的抓取

用Hyer来进行网站的抓取

浏览:157242次  出处信息

    Hyer是我个人用来抓取站点内容的一个工具包。后来慢慢地想做成一个开源软件,现在它注册在http://www.github.com/xurenlu/hyer/ 上。

    本文作为入门教程,以新华网作为例子,讲讲如何用hyer做网页抓取。

    请从这里http://github.com/xurenlu/hyer/downloads下载hyer-0.6.12.tar.gz这个压缩包,解压。

    我们要用的主要是webctl.py这个文件,我们需要对它进行一些修改。在修改之前,先创建一个数据库,将sql/struct.sql导入进去。

以下是代码片段:
mysql> create database hyer;
mysql > exit;
$mysql -uroot hyer < sql/struct.sql

    然后我们打开webctl.py,修改几个地方:

以下是代码片段:
conf={
        "db_path":"./tmp/",  #1
        "feed":"http://www.xinhuanet.com/newscenter/index.htm",
        #"feed":"http://localhost/htests/",
        "max_in_minute":60,
        "agent":"Mozilla/Firefox",
        "same_domain_regexps":[re.compile("http://www.xinhuanet.com/")],
        #"same_domain_regexps":[re.compile("http://localhost/htests/")],
        "url_db":hyer.urldb.Urldb_mysql({"host":"localhost","user":"root","pass":"","db":"hyer2"}),
        "task":"profiletest",
        "leave_domain":False,
        "document":hyer.document.SimpleHTMLDocument
        }
spider=hyer.spider.spider(conf)

writerconf={
        "host":"localhost",
        "user":"root",
        "pass":"",
        "db":"hyer2",
        "table":"xinhuall",
        "fields":["url","content","tags","charset"]  #2
    }

    里面首先需要修改的是跟mysql连接相关的部分,比如host,user,pass,db这几个。

    #1 db_path是log记录的目录,需要确保这个目录存在。

    #2 这里是保存某个文档的真正代码。

    现在运行一下:

以下是代码片段:
$./webctl.py
嗯,代码跑起来了。不过这样我们并没有保存到任何实质性的内容,嗯。我们需要保存到真正的内容,这才是真正的目的。
那要怎么做呢?看这段代码:
以下是代码片段:
 hyer.event.add_event("new_document",handle_new_doc)

    我使用了类似wordpress的一种事件机制,在抓虫抓到新文档的时候,会自动把文档做为参数传给handle_new_doc这个函数。它会处理包括保存在内的逻辑。您现在只需修改这个函数,就可以实现分析和保存功能。

    为了更方便保存,我还写了一个类,专门用来干这差事,看代码里这一行:

以下是代码片段:
#wdb.run(doc)
我暂时注释起来了。这个wdb是一个叫dbwriter的类,我们看它的定义:
以下是代码片段:
writerconf={
        "host":"localhost",
        "user":"root",
        "pass":"",
        "db":"hyer2",
        "table":"xinhuall",
        "fields":["url","content","tags","charset"]
    }
wdb=hyer.dbwriter.MySQLWriter(writerconf)

    这里的参数很好理解,就是用root用户空密码连接到localhost的hyer2这个数据库,然后将文档的url,content,tags,charset这几项保存到xinhuall表里,这几列要跟表里的对应(数据表里也建好了这么url,content,tags,charset几列).

    嗯,到此为止,一个极简单的抓取就完成了。

    其实这个包里还有很多工具,我是想在一套底层上实现两套东西,一套往stackless上走,这里的理念更新一些,另一套往scrapy上走,这里的更简单易于理解。已经实现了一堆工具包,期望能给大家抓网站提供方便。不过,目前仍然不太适合实际应用,抓个小站,偷个BT列表什么的还行。

    我把文档也放了一份在这个主机上,大家可以打开看看。只是想法, 一时半会还不能全部实现。

建议继续学习:

  1. 抓取网页内容生成Kindle电子书    (阅读:8439)
  2. 淘宝搜索:定向抓取网页技术漫谈    (阅读:8273)
  3. Python抓取框架:Scrapy的架构    (阅读:7754)
  4. 快速构建实时抓取集群    (阅读:4387)
  5. cURL基础教程    (阅读:3924)
  6. 新浪博客抓取程序(php)    (阅读:3794)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1