Skip to content

快速入门

zhengchun edited this page Dec 6, 2017 · 2 revisions

安装

go get github.com/antchfx/antch

定义Item

type item struct {
    Title string `json:"title"`
    Link  string `json:"link"`
    Desc  string `json:"desc"`
}

创建Spider

新建dmozSpider类,并实现Handler接口。dmozSpider将会处理dmoztools.net网站的页面。

type dmozSpider struct {}

func (s *dmozSpider) ServeSpider(c chan<- antch.Item, res *http.Response) {}

dmozSpider将从响应的Web页面提取数据Item并传递到Pipeline中。

doc, err := antch.ParseHTML(res)
for _, node := range htmlquery.Find(doc, "//div[@id='site-list-content']/div") {
    v := new(item)
    v.Title = htmlquery.InnerText(htmlquery.FindOne(node, "//div[@class='site-title']"))
    v.Link = htmlquery.SelectAttr(htmlquery.FindOne(node, "//a"), "href")
    v.Desc = htmlquery.InnerText(htmlquery.FindOne(node, "//div[contains(@class,'site-descr')]"))
    c <- v
}

导入htmlquery,使用XPath表达式提取数据,并将Item给Go'Channel c.

c <- v

创建Pipeline

新建jsonOutputPipeline,实现PipelineHandler接口。jsonOutputPipeline将序列化dmozSpider的Item数据并输出到控制台。

type jsonOutputPipeline struct {}

func (p *jsonOutputPipeline) ServePipeline(v Item) {
	b, err := json.Marshal(v)
	if err != nil {
		panic(err)
	}
	os.Stdout.Write(b)
}

Crawler

crawler := antch.NewCrawler()

你可以根据爬虫的需求开启功能组件。比如robots.txt或者HTTP cookies.

  • 启用Cookies组件,爬虫将会支持网站HTTP Cookies.
crawler.UseCookies()
  • 甚至,你可以选择注册自定义组件。
crawler.UseMiddleware(CustomMiddleware())

注册Spider和Pipeline

注册dmozSpider到爬虫实例。

crawler.Handle("dmoztools.net", &dmozSpider{})

注册jsonOutputPipeline到爬虫实例。

crawler.UsePipeline(newTrimSpacePipeline(), newJsonOutputPipeline())

运行

startURLs := []string{
    "http://dmoztools.net/Computers/Programming/Languages/Python/Books/",
    "http://dmoztools.net/Computers/Programming/Languages/Python/Resources/",
}
crawler.StartURLs(startURLs)

结束

go run main.go

Source Code

https://github.com/antchfx/antch-getstarted

Clone this wiki locally