前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >request+goquery+mahonia实现自动抓取网页数据

request+goquery+mahonia实现自动抓取网页数据

作者头像
hotqin888
发布2018-09-11 14:42:53
1.1K0
发布2018-09-11 14:42:53
举报
文章被收录于专栏:hotqin888的专栏hotqin888的专栏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1334366

代码语言:txt
复制
               设计院OA上有维护得比较好的法规库,3000多条,我用了30分钟一页页拷贝到excel中。一共1500页啊。

为啥不用代码抓取呢?因为开始连用chrome登陆访问这个库都打不开,只支持ie。用fiddler获得库页面地址,拷贝到chrome中,也是直接跳到登陆页。今天再努力,chrome登陆,然后点击:进入系统——会打开一个独立的窗口,这个窗口似乎不支持地址输入,没关系,在这个窗口中——公共信息——点下拉——技术标准,会打开一个新窗口,库就出现了。

此时,再回到chrome任何标签页,输入地址,也可以打开了这个库了。不知为何这么复杂。

仅仅记录一下。

下面进入正题,用代码直接抓取库。这样用一个循环可以把1500页一次性抓下来了。

用到三个知识点:request库是构造http访问信息头的,这里将登陆的cookie带上,才能模拟登陆了;mahonia是将页面gb的编码转成utf-8,否则是乱码;goquery大名鼎鼎的获取html中所需要的信息,过滤,定位。

码: 

代码语言:javascript
复制
package main


import (

    "code.google.com/p/mahonia"

    "fmt"

    "github.com/PuerkitoBio/goquery"

    "github.com/mozillazg/request"

    "log"

    "net/http"

)


func main() {

    c := new(http.Client)

    req := request.NewRequest(c)

    req.Cookies = map[string]string{

        "JSESSIONID": "35A39472B18BC213B6288F3B6BAA3ABC", //76751D487E4931BA53EE7EF51760E88F

        "stylePath":  "",

    }

    resp, _ := req.Get("http://gpdioa.gpdiwe.com/ProjManager/flfgv08070300009.jsp?08070300003_page=1

    &flf81024flfgl01=&flf81024flfgl01=%BC%BC%CA%F5%B1%EA%D7%BC")


    defer resp.Body.Close() // Don't forget close the response body


    dec := mahonia.NewDecoder("GB2312") //定义转换乱码

    //  fmt.Println(dec.ConvertString(j))   //转成utf-8


    rd := dec.NewReader(resp.Body)

    doc, err := goquery.NewDocumentFromReader(rd)

    if err != nil {

        log.Fatal(err)

    }


    // Find the review items

    doc.Find("tr.trclass").Each(func(i int, s *goquery.Selection) {

        // For each item found, get the band and title

        band := s.Find("td").Text()

        //      title := s.Find("i").Text()

        fmt.Printf("%d: 序号、编号、名称、分类……%s\n", i, band) //, title

    })


}

输出结果:

0: 序号、编号、名称、分类……1 水利水电工程建设程序及法规汇编(第三版)政策法规技术标准2016-08-012016-08-01

1: 序号、编号、名称、分类……215S909《消防给水及消火栓系统技术规范》图示其它技术标准

2: 序号、编号、名称、分类……314S104二次供水消毒设备选用及安装其它技术标准

3: 序号、编号、名称、分类……415SS510绿地灌溉与体育场地给水排水设施其它技术标准

4: 序号、编号、名称、分类……5GA 180轻便消防水龙其它技术标准

5: 序号、编号、名称、分类……614X505-1火灾自动报警系统设计规范图示其它技术标准

6: 序号、编号、名称、分类……7GB 50594-2010水功能区划分标准国家标准技术标准

7: 序号、编号、名称、分类……8国务院令(2003)第393号建设工程安全生产管理条例政策法规技术标准

8: 序号、编号、名称、分类……9SL 721-2015水利水电工程施工安全管理导则行业标准技术标准2015-07-312015-10-31

9: 序号、编号、名称、分类……10JGJ 107-2016钢筋机械连接技术规程行业标准技术标准

10: 序号、编号、名称、分类……11SL 677-2014水工混凝土施工规范行业标准技术标准

11: 序号、编号、名称、分类……12 中华人民共和国航道法国家标准技术标准2016-07-022016-07-02

12: 序号、编号、名称、分类……13 中华人民共和国职业病防治法政策法规技术标准2016-07-022016-07-02

13: 序号、编号、名称、分类……14主席令74号中华人民共和国水法政策法规技术标准2016-07-022016-07-02

14: 序号、编号、名称、分类……15 中华人民共和国节约能源法政策法规技术标准2016-07-022016-07-02

15: 序号、编号、名称、分类……16SL/Z 738-2016水生态文明城市建设评价导则行业标准技术标准2016-04-112016-07-11

16: 序号、编号、名称、分类……17SL 734-2016水利工程质量检测技术规程行业标准技术标准2016-06-072016-09-07

17: 序号、编号、名称、分类……18SL 725-2016水利水电工程安全监测设计规范行业标准技术标准2016-05-232016-08-23

18: 序号、编号、名称、分类……19GB 51079-2016城市防洪规划规定国家标准技术标准 2017-02-01

19: 序号、编号、名称、分类……20CJ 343-2010污水排入城市下水道水质标准行业标准技术标准2010-07-292011-01-01CJ 3082-1999

原始页面:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年08月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档