Go语言爬取百度贴吧内容

网友投稿 640 2022-11-22

Go语言爬取百度贴吧内容

Go语言爬取百度贴吧内容

网站爬取最重要的是分析网站内容以及爬取方式,可以参考以下几点:

1.明确爬取目标:

百度贴吧的王者荣耀贴吧(进入百度贴吧搜索王者荣耀),如下:

2.分析网站规则:

分析网站中下一页的设置,如何跳转到下一页,爬取下一页的内容(注意上方的网址链接变化),如下:

第一页变化如下:

第二页:

第三页:

第一页链接末尾是0,后续页面基本是前面页面的+50

第1页链接:

HttpGet(url string) (result string, err error) { resp, err1 := if err1 != nil { err = err1 return } defer resp.Body.Close() //读取网页body内容 buf := make([]byte, 1024*4) for { n, err := resp.Body.Read(buf) if n == 0 { //读取结束,或者出问题 fmt.Println("resp.Body.Read err = ", err) break } result += string(buf[:n]) } return}

4.处理数据

将数据写入文件:

//把爬取的内容写入一个文件 fileName := strconv.Itoa(i) + ".html" f, err1 := os.Create(fileName) if err1 != nil { fmt.Println("os.Create err1 = ", err1) continue } f.WriteString(result) //写内容 f.Close() //关闭文件

完整的代码

package mainimport ( "fmt" "net/ "os" "strconv")//爬取网页内容func HttpGet(url string) (result string, err error) { resp, err1 := if err1 != nil { err = err1 return } defer resp.Body.Close() //读取网页body内容 buf := make([]byte, 1024*4) for { n, err := resp.Body.Read(buf) if n == 0 { //读取结束,或者出问题 fmt.Println("resp.Body.Read err = ", err) break } result += string(buf[:n]) } return}func DoWork(start, end int) { fmt.Printf("正在爬取%d到%d的页面", start, end) //明确目标(要知道你准备在哪个范围或者网站上搜索) // //下一页要+50 //迭代爬取内容 for i := start; i <= end; i++ { url := "+ //将页面值转换为字符串类型((i-1)*50是int类型) strconv.Itoa((i-1)*50) fmt.Println("正在爬取第%d页", i) //2)爬 (将所有的网站内容全部爬下来) result, err := HttpGet(url) if err != nil { fmt.Println("HttpGet err = ", err) continue } //把爬取的内容写入一个文件 fileName := strconv.Itoa(i) + ".html" f, err1 := os.Create(fileName) if err1 != nil { fmt.Println("os.Create err1 = ", err1) continue } f.WriteString(result) //写内容 f.Close() //关闭文件 }}func main() { var start, end int fmt.Println("输入爬取的起始页(>=1)") fmt.Scan(&start) fmt.Println("输入爬取的终止页(>=start)") fmt.Scan(&end) DoWork(start,end)}

运行前:

运行后:

打开文件后会发现和百度贴吧的内容基本一致,如下图:

下一节我们将使用高并发来爬取数据,体验go语言爬虫真正的实力:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Js中获取当月共有多少天
下一篇:[笔记]再笔记--边干边学Verilog HDL --001
相关文章

 发表评论

暂时没有评论,来抢沙发吧~