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中所需要的信息,过滤,定位。
码:
输出结果:
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
原始页面:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201608/8de0d04c578f1d64f7f0bc865fed63c5)
为啥不用代码抓取呢?因为开始连用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
原始页面:
相关文章推荐
- C#实现通过程序自动抓取远程Web网页信息
- C#实现通过程序自动抓取远程Web网页信息
- 利用HttpWebRequest自动抓取51la统计数据
- C#自动登录网页浏览页面 抓取数据
- 使用System.Text.RegularExpression中的API实现网页数据的抓取
- C#(ASP.NET) 下载数据 C#实现通过程序自动抓取远程Web网页信息
- C#实现通过程序自动抓取远程Web网页信息的代码
- 利用HttpWebRequest自动抓取51la统计数据
- 编程实现网页表单数据的自动提交
- C#自动登录网页浏览页面 抓取数据
- Delphi实现网页表单数据的自动提交
- C#实现通过程序自动抓取远程Web网页信息(转载)
- 使用System.Text.RegularExpression中的API实现网页数据的抓取
- 实现TEXTAREA数据写入数据库后提取出来原样显示在网页TABLE上并自动换行
- C#实现通过程序自动抓取远程Web网页信息
- C#实现通过程序自动抓取远程Web网页信息
- 使用System.Text.RegularExpression中的API实现网页数据的抓取
- htmlparser实现从网页上抓取数据
- Delphi实现网页表单数据的自动提交
- 利用HttpWebRequest自动抓取51la统计数据