IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用Hyer来进行网站的抓取

互联网,请记住我 2009-12-23 09:47:13 累计浏览 158,166 次
本机暂存

    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. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&amp;A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 106,984)
  2. MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,326)
  3. 程序员技术练级攻略 (累计阅读 35,194)
  4. python实现自动登录discuz论坛 (累计阅读 32,726)
  5. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,085)
  6. Mysql监控指南 (累计阅读 21,218)
  7. python编程细节──遍历dict的两种方法比较 (累计阅读 20,283)
  8. 每个程序员都应该学习使用Python或Ruby (累计阅读 17,824)
  9. Chrome和goagent的配置方法,你懂的 (累计阅读 16,682)
  10. 由浅入深探究mysql索引结构原理、性能分析与优化 (累计阅读 16,191)