构建垂直搜索引擎 互动版

pyspider数据抓取


  由于教程是基于 pyspider 的,你可以安装一个 pyspiderhttp://demo.pyspider.org/)。

  网络数据抓取实际就是去爬网页,而爬网页实际上就是:

  1. 找到包含我们需要的信息的网址(URL)列表;
  2. 通过 HTTP 协议把页面下载回来;
  3. 从页面的 HTML 中解析出需要的信息;
  4. 找到更多这个的 URL,回到 2 继续。

  在数据抓取的过程中,我们需要对万维网有一些简单的认识,万维网使用http协议传输,采用html描述外观和语义,使用网址(URL)定位,并链接彼此等。这样我们更容易对抓取到的数据进行解析。

  from libs.base_handler import *
  class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('http://scrapy.org/', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        for each in response.doc('a[href^="http"]').items():
            self.crawl(each.attr.href, callback=self.detail_page)

    @config(priority=2)
    def detail_page(self, response):
        return {
            "url": response.url,
            "title": response.doc('title').text(),
        }

  以上代码是创建任务后默认生成的一个脚本示例。

  通过 _onstart 回调函数,作为爬取的入口点,当点击主面板上的 run 的时候,就是调用这个函数,启动抓取。 self.crawl 告诉调度器,默认抓取 'http://scrapy.org/' 这个页面,然后使用 _callback=self.indexpage 这个回调函数进行数据解析。所有 return 的内容默认会被捕获到 resultdb 中。