设计院OA上有维护得比较好的法规库,3000多条,我用了30分钟一页页拷贝到excel中。一共1500页啊。
为啥不用代码抓取呢?因为开始连用chrome登陆访问这个库都打不开,只支持ie。用fiddler获得库页面地址,拷贝到chrome中,也是直接跳到登陆页。今天再努力,chrome登陆,然后点击:进入系统——会打开一个独立的窗口,这个窗口似乎不支持地址输入,没关系,在这个窗口中——公共信息——点下拉——技术标准,会打开一个新窗口,库就出现了。
此时,再回到chrome任何标签页,输入地址,也可以打开了这个库了。不知为何这么复杂。
仅仅记录一下。
下面进入正题,用代码直接抓取库。这样用一个循环可以把1500页一次性抓下来了。
用到三个知识点:request库是构造http访问信息头的,这里将登陆的cookie带上,才能模拟登陆了;mahonia是将页面gb的编码转成utf-8,否则是乱码;goquery大名鼎鼎的获取html中所需要的信息,过滤,定位。
为啥不用代码抓取呢?因为开始连用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