最简单的网络爬虫和数据模拟

最简单的网络爬虫和数据模拟

首页动作格斗爬虫模拟器更新时间:2024-05-09

在上一篇文章——中,我叙述了如何白嫖Jetbrains公司的一系列编译器(当然,这不是必要掌握和实践的),这篇文章,我将使用它的针对Go语言开发的编译器——GoLand进行HTTP的编程(刷一些文章的浏览量和简单的爬虫)。

GoLand下载安装和使用

近几年来jetbrains推出的产品备受开发者喜爱,不管是intellij IDEA还是WebStorm等开发工具,都成为了开发界的一款利器。(intellij IDEA主要是在Java中使用的比较多,但是它可以安装任何的插件,你可以使用它来编译任何你想要使用的语言,只不过是需要安装插件的,此处就不在详细叙述)

相信很多的开发者在选取编译器时都很迷茫,现在网络上有很多各式各类的编译器,那么我在这里所推荐的这款编译器是jetbrains公司的产品--GoLand。

近几年来jetbrains推出的产品备受开发者喜爱,不管是intellij IDEA还是WebStorm等开发工具,都成为了开发界的一款利器。(intellij IDEA主要是在Java中使用的比较多,但是它可以安装任何的插件,你可以使用它来编译任何你想要使用的语言,只不过是需要安装插件的,此处就不在详细叙述)

1.GoLand下载地址:https://www.jetbrains.com/go/

2.安装

傻瓜式一键安装即可。

3.登录

这里需要登录你的jetBrains账号(该公司产品都有点小贵,建议各位谨慎剁手,但对于学生和老师可以免费试用一年,等到了下一年再重新登录即可,学生注册可以参考身为学生所拥有的巨额财富,当然你可以教我微信私聊,我给你我的注册码)


这样就完成了 GoLang的安装,就可以使用了:


4.编写hello world

(1)新建一个项目:

(2)新建一个.go文件:

(3)编写hello world:

程序代码:

package main import "fmt" func main() { fmt.Println("hello world") }


点击绿色三角运行:

运行结果:

以上就是GoLand的安装和使用教程。

HTTP编程

在进行http编程时,Go语言标准库内建提供了net/http包,涵盖了HTTP客户端和服务器的具体实现。使用net/http包,我们可以很方便的编写HTTP客户端或者服务端的程序,在平时进行web端的开发中,理解HTTP编程思想是十分重要的。


刷点击量

看到这里了,就来点干货吧,当你分析过一个网站的浏览量规律就会发现它们都是有机可乘的,就像简书、博客园、CSDN等,例如简书,你可以发现,当你在非登录状态刷新自己的文章,每刷新一次页面,就是一次浏览量;CSDN每两到三分钟刷新一次页面,浏览量就会增加;以下就是CSDN浏览量刷新规律的代码,直接将自己文章的链接放进去即可,亲测有效。

  1. 新建一个go文件:lcc_CSDNjp.go
  2. 编写如下代码:

package main ​ import ( "fmt" "net/http" "time" ) //初始化一个数,进行计数 var lcc = 0 func lcc_CSDNjp() { //以下url均为所需要点击的链接,即要点击的网页 url := "文章链接" //使用Get请求,模拟点击 http.Get(url) //打印url println(url) url1 := "文章链接" http.Get(url1) println(url1) //点击数加一 lcc } func main() { //获取当前时间 time1 := time.Now().Unix() //调用方法 lcc_CSDNjp() //打印次数 fmt.Println(lcc) //死循环,除非强制停止,否则一直执行 for i := 0; i >= 0; i { //如果距离上一次点击时间间隔大于120秒 if (time.Now().Unix() - time1) > 120 { lcc_CSDNjp() fmt.Println(lcc) time1 = time.Now().Unix() } } }

如图所示:

40行代码即可进行简单的爬虫。

如若想要对个人主页的所有文章进行模拟点击请私信我(仅用于学习测试)。

爬取一些文章或资源

HTTP编程除了可以进行简单的模拟点击效果,还可以对网页中的信息提取,只要简单的分析HTML的代码,即可简单的获取想要的资源,下面是对一个简单的段子网进行爬虫。
地址:http://duanziwang.com/

代码:

package main ​ import ( "fmt" "net/http" "os" "regexp" "strconv" "strings" ) ​ func test_HttpGet(url string) (result string, err error) { resp, err1 := http.Get(url) if err1 != nil { err = err1 return } defer resp.Body.Close() ​ buf := make([]byte, 1024*4) for { n,_ := resp.Body.Read(buf) if n == 0 { break } result = string(buf[:n]) } return } ​ func test_SpiderOneJoy(url string) (title, content string, err error) { ​ result, err1 := test_HttpGet(url) if err1 != nil { err = err1 return } ​ //取标题 re1 := regexp.MustCompile(`<h1 class="post-title">(?s:(.*?))</h1>`) if re1 == nil { err = fmt.Errorf("%s","regexp.MustCompile err") return } ​ tmpTitle := re1.FindAllStringSubmatch(result, -1) for _, data := range tmpTitle{ title = data[1] title = strings.Replace(title, "\r","",-1) title = strings.Replace(title, "\n","",-1) title = strings.Replace(title, "","",-1) title = strings.Replace(title, "\t","",-1) break } ​ re2 := regexp.MustCompile(`<section class="post-content">(?s:(.*?))</section>`) if re2 == nil { err = fmt.Errorf("%s","regexp.MustCompile err") return } ​ tmpContent := re2.FindAllStringSubmatch(result, -1) for _, data := range tmpContent{ content = data[1] content = strings.Replace(content, "\r","",-1) content = strings.Replace(content, "\n","",-1) content = strings.Replace(content, "","",-1) content = strings.Replace(content, "\t","",-1) content = strings.Replace(content, "<p>","",-1) content = strings.Replace(content, "</p>","",-1) content = strings.Replace(content, "<br>","\n",-1) break } return } ​ func test_StoreJoyToFile(i int, fileTitle , fileContent []string) { f, err := os.Create(strconv.Itoa(i) ".txt") if err != nil { fmt.Println("os.Create err = ",err) return } defer f.Close() ​ n := len(fileTitle) for i := 0; i < n ; i { f.WriteString(fileTitle[i] "\n") f.WriteString(fileContent[i] "\n") f.WriteString("\n") f.WriteString("\n") } ​ ​ ​ } ​ ​ func test_SpiderPage(i int, page chan int) { ​ //http://duanziwang.com/page/1/ url := "http://duanziwang.com/page/" strconv.Itoa(i) fmt.Printf("正在爬取第%d个页面\n",i) ​ result, err := test_HttpGet(url) if err != nil { fmt.Println("CSDN_HttpGet err = ", err) return } ​ //取 <h1 class="dp-b"><a href=" 段子url地址 "=====>>>正则表达式 ​ re := regexp.MustCompile(`<h1 class="post-title"><a href="(?s:(.*?))">`) if re == nil { fmt.Println("regexp.MustCompile err") return } ​ //取关键信息===>>每一页的段子链接组成一个切片 joyUrl := re.FindAllStringSubmatch(result,-1) ​ fileTitle := make([]string,0) fileContent := make([]string,0) ​ //取网址 for _,data := range joyUrl{ title, content, err := test_SpiderOneJoy(data[1]) if err != nil { fmt.Println("test_SpiderOneJoy err = ",err) continue } fileTitle = append(fileTitle, title) fileContent = append(fileContent, content) ​ } test_StoreJoyToFile(i,fileTitle,fileContent) ​ page <- i //写内容,写num } func test_Dowork(start, end int) { fmt.Printf("准备爬取第%d到%d页的网址\n",start,end) page := make(chan int) for i := start; i <= end ; i { go test_SpiderPage(i,page) } ​ for i := start; i<= end; i { fmt.Printf("第%d个页面爬取完成\n", <-page) } } func main() { var start, end int fmt.Println("输入爬取的起始页(>=1)") fmt.Scan(&start) fmt.Println("输入爬取的起始页(>=start)") fmt.Scan(&end) test_Dowork(start,end) }

文件1.txt、2.txt、3.txt均为段子的存储文件:

以上就是对段子爬虫的一个简单实例。


HTTP编程最常用的实例就是网络爬虫,但网络爬虫存在一定的风险,也就是所谓的在河边走,每年都会有程序员因为一段爬虫程序而请去喝茶,所以请各位谨慎。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved