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

 设计院OA上有维护得比较好的法规库,3000多条,我用了30分钟一页页拷贝到excel中。一共1500页啊。
为啥不用代码抓取呢?因为开始连用chrome登陆访问这个库都打不开,只支持ie。用fiddler获得库页面地址,拷贝到chrome中,也是直接跳到登陆页。今天再努力,chrome登陆,然后点击:进入系统——会打开一个独立的窗口,这个窗口似乎不支持地址输入,没关系,在这个窗口中——公共信息——点下拉——技术标准,会打开一个新窗口,库就出现了。
此时,再回到chrome任何标签页,输入地址,也可以打开了这个库了。不知为何这么复杂。

仅仅记录一下。

下面进入正题,用代码直接抓取库。这样用一个循环可以把1500页一次性抓下来了。
用到三个知识点:request库是构造http访问信息头的,这里将登陆的cookie带上,才能模拟登陆了;mahonia是将页面gb的编码转成utf-8,否则是乱码;goquery大名鼎鼎的获取html中所需要的信息,过滤,定位。

码: 

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 /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 
 
原始页面:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值