内..._golang 并发爬虫">
当前位置:   article > 正文

golang版并发爬虫

golang 并发爬虫

 

准备爬取内涵段子的几则笑话,先查看网址:http://www.budejie.com/text/

简单分析后发现每页的url呈加1趋势

第一页: http://www.budejie.com/text/1

第二页:http://www.budejie.com/text/2

...

 

每页的段子:

<a href="/detail-28278217.html"> 内容</a>

<a href="/detail-28270675.html"> 内容</a>

....

 

所以正则表达式的解释规则是<a href="/detail-\d{8}.html">(?s:(.*?))</a>,第一个分组的内容就是需要的文字。

 

代码如下:

  1. package main
  2. import (
  3. "fmt"
  4. "regexp"
  5. "strconv"
  6. "net/http"
  7. "log"
  8. "os"
  9. "strings"
  10. )
  11. func onespider(n int, ch chan int) {
  12. url := "http://www.budejie.com/text/" + strconv.Itoa(n)
  13. resp, err := http.Get(url)
  14. if err != nil {
  15. log.Fatal("get error")
  16. }
  17. defer resp.Body.Close()
  18. reg, err1 := regexp.Compile(`<a href="/detail-\d{8}.html">(?s:(.*?))</a>`)
  19. if err1 != nil {
  20. log.Fatal("compile error")
  21. }
  22. var respstring string
  23. buf := make([]byte, 1024)
  24. for {
  25. n, _ := resp.Body.Read(buf)
  26. if n == 0 {
  27. break
  28. }
  29. respstring += string(buf[:n])
  30. }
  31. cont := reg.FindAllStringSubmatch(respstring, -1)
  32. file, _ := os.OpenFile("./爬虫/"+"第"+strconv.Itoa(n)+"页爬虫.txt", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0666)
  33. defer file.CLose()
  34. var i int
  35. for _, value := range cont {
  36. if len(value[1]) < 100 {
  37. continue
  38. }
  39. value[1] = strings.Replace(value[1], "<br />", "\n", -1)
  40. index := strconv.Itoa(i+1)
  41. file.Write([]byte("第"+index+"则段:\n"+value[1]+"\n\n\n"))
  42. i++
  43. }
  44. ch <- n
  45. }
  46. func Spider(s, e int) {
  47. ch := make(chan int)
  48. for i := s; i <= e; i++ {
  49. go onespider(i, ch)
  50. }
  51. for i := s; i <= e; i++ {
  52. n := <- ch
  53. fmt.Printf("第%d页爬取完毕\n", n)
  54. }
  55. }
  56. func main(){
  57. var start, end int
  58. fmt.Println("输入起始页")
  59. fmt.Scan(&start)
  60. fmt.Println("输入终止页")
  61. fmt.Scan(&end)
  62. Spider(start, end)
  63. }

 

  

运行截图:

 

效果截图:

 

 

 

 

最后我发现第2页之后的段子都是重复的。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/607779
推荐阅读
相关标签
  

闽ICP备14008679号