-
Notifications
You must be signed in to change notification settings - Fork 41
快速入门
zhengchun edited this page Dec 6, 2017
·
2 revisions
go get github.com/antchfx/antch
type item struct {
Title string `json:"title"`
Link string `json:"link"`
Desc string `json:"desc"`
}
新建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
新建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 := antch.NewCrawler()
你可以根据爬虫的需求开启功能组件。比如robots.txt或者HTTP cookies.
- 启用Cookies组件,爬虫将会支持网站HTTP Cookies.
crawler.UseCookies()
- 甚至,你可以选择注册自定义组件。
crawler.UseMiddleware(CustomMiddleware())
注册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