国产化驱动经济自主性与科技创新的未来之路
727
2022-11-22
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~