您的位置:首页 > 产品设计 > UI/UE

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

2016-08-12 20:00 190 查看
 设计院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/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 

 
原始页面:



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: