内容简介:最近忍痛买了某站会员,心想不能亏(屌丝!),就想把关注的大部分资源都爬下来,以备会员到期后继续薅羊毛。想起来在一亩田工作的时候写过几个友商的爬虫,然后翻翻自己的历史代码,啊,scrapy 真是简单。然后就发现 python 的环境在 mac 上已经被我玩坏了,汗。然后翻箱倒柜找自己 star 的 repo,找到了这个 Go 写的爬虫框架:
最近忍痛买了某站会员,心想不能亏(屌丝!),就想把关注的大部分资源都爬下来,以备会员到期后继续薅羊毛。
想起来在一亩田工作的时候写过几个友商的爬虫,然后翻翻自己的历史代码,啊,scrapy 真是简单。
然后就发现 python 的环境在 mac 上已经被我玩坏了,汗。然后翻箱倒柜找自己 star 的 repo,找到了这个 Go 写的爬虫框架:
https://github.com/gocolly/colly
看了文档和 Demo,感叹做的真是良心。使用起来比 scrapy 还要简单。还可以在登陆时自动处理 cookie(大赞。
内容处理上和 scrapy 差不多,我只要能知道需要爬取的内容的 xpath,或者 html selector,那么我就可以撬动地球了(笑。
package main import ( "fmt" "io/ioutil" "os" "strings" "regexp" "github.com/gocolly/colly" ) var f *os.File var visited = map[string]bool{} var fileName = "./c_log" func pathExists(path string) bool { _, err := os.Stat(path) if err == nil { return true } if os.IsNotExist(err) { return false } return false } // open file, read links already crawled func init() { var err error if !pathExists(fileName) { f, err = os.Create(fileName) if err != nil { fmt.Println(err) os.Exit(1) } err = f.Close() if err != nil { fmt.Println(err) os.Exit(1) } } contents, err := ioutil.ReadFile(fileName) if err != nil { fmt.Println(err) os.Exit(1) } links := strings.Split(string(contents), "\n") for _, link := range links { if link != "" { visited[link] = true } } f, err = os.OpenFile(fileName, os.O_APPEND|os.O_RDWR, 0777) if err != nil { fmt.Println(err) os.Exit(1) } } var separater = "#######################################################" func main() { // Instantiate default collector c := colly.NewCollector( // Visit only domains: hackerspaces.org, wiki.hackerspaces.org colly.AllowedDomains("www.0daydown.com"), ) detailRegex, _ := regexp.Compile(`.*//www.0daydown.com/\d+/\d+.html$`) listRegex, _ := regexp.Compile(`.*//www.0daydown.com/category/tutorials/page/\d+`) panRegex, _ := regexp.Compile(`pan.baidu.com`) c.OnHTML("article", func(e *colly.HTMLElement) { // Print article if !panRegex.Match([]byte(e.Text)) { return } fmt.Println(e.Text) fmt.Println(separater) }) // On every a element which has href attribute call callback c.OnHTML("a[href]", func(e *colly.HTMLElement) { link := e.Attr("href") if link == "http://www.0daydown.com/09/680172.html" { return } if link == "http://www.0daydown.com/05/7977.html" { return } // 已访问过的详情页或列表页,跳过 if visited[link] && (detailRegex.Match([]byte(link)) || listRegex.Match([]byte(link))) { return } // 匹配下列两种 url 模式的,才去 visit // http://www.0daydown.com/category/tutorials/page/6 // http://www.0daydown.com/07/896908.html if !detailRegex.Match([]byte(link)) && !listRegex.Match([]byte(link)) { return } visited[link] = true f.WriteString(link + "\n") //time.Sleep(time.Millisecond * 100) c.Visit(e.Request.AbsoluteURL(link)) }) // Before making a request c.OnRequest(func(r *colly.Request) { r.Headers.Set("Cookie", "your cookie") r.Headers.Set("DNT", "1") r.Headers.Set("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36") r.Headers.Set("Host", "www.0daydown.com") }) c.Visit("http://www.0daydown.com/category/tutorials/page/2") }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 在白板上写写画画,集成AutoML的数据分析也能如此简单
- 爬虫需谨慎,那些你不知道的爬虫与反爬虫套路!
- 反爬虫之字体反爬虫
- 反爬虫之字体反爬虫
- python网络爬虫之初始网络爬虫
- Python网络爬虫2:迷你爬虫架构
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
实战移动互联网营销
江礼坤 / 机械工业出版社 / 2016-1 / 79.00
移动互联网的兴起,又为企业带来了新的挑战与机遇!越来越多的人,看到了移动互联网的价值与前景,但是在具体操作时,移动互联网具体如何玩?企业如何向移动互联网转型?如何通过移动互联网做营销?等等一系列问题,接踵而至。虽然目前相关的资料和文章很多,但是都过于零散,让人看完后,还是无从下手。而本书旨在成为移动互联网营销领域标准的工具书、参考书,为大家呈现一个系统、全面的移动互联网营销体系。让大家从思维模式到......一起来看看 《实战移动互联网营销》 这本书的介绍吧!