Groovy 通过代理ip抓取网页
上一篇博客“Groovy 安装与开发”,介绍了Groovy的安装和开发,包括基本语法、变量、函数等,本文将重点介绍Groovy爬取网页。
在介绍Groovy爬取网页前,先介绍下 Grails框架,它是Groovy抓取网页的基础Web框架。
Grails 简介
Grails 官网: http://www.grails.org
A powerful Groovy-based web application framework for the JVM built on top of Spring Boot
Grails is an Open Source (Apache 2 License) web framework, for the Java platform aimed at multiplying developers’ productivity thanks to a Convention-over-Configuration, sensible defaults and opinionated APIs. It integrates smoothly with the JVM, allowing you to be immediately productive whilst providing powerful features, including integrated ORM, Domain-Specific Languages, runtime and compile-time meta-programming and Asynchronous programming.
Grails 是搭建在动态语言 Groovy 之上的一个开源 MVC Web 开发框架,Grails 的一个显著特点在于“快”,这主要得益于 Groovy 脚本语言的动态特性,也得益于其“一栈式”的设计。与传统的 Java、C#、PHP等Web 开发框架相比,它可以使用极少的代码和配置实现诸如表单提交、数据库读写等常见的 Web 应用功能,实现了开发效率的成倍提高。
与它的老师 Ruby on Rails 相比,Grails 的优势在于 Groovy 语言与 Java 平台的紧密集成。
一方面, Groovy 在语法上与 Java 十分相似,降低了众多的 Java 程序员学习 Grails 的门槛。
另一方面,Groovy 本身运行于 JVM 之上,可以直接调用 Java 代码,实现了与 Java 平台的完美整合,因此可以将 Grails Web 应用运行在成熟可靠的 Java EE 应用服务器之上。
Grails 是一个遵循 MVC 设计模式的 Web 开发框架。它分别用 Domain Class、View、Controller 对应于 MVC 的模型、视图和控制器。可以简单的把一个 Domain Class 理解为数据库中的一张表,Grails 在底层通过 Hibernate 将 Domain Class 和数据库的表进行了映射。View 在 Grails 中指的是 GSP 页面(注意是 GSP 不是 JSP),它用于显示用户界面。GSP 与 JSP 类似,既可以编写静态网页的元素,也可以嵌入 Groovy 代码实现动态内容。Controller 在 Grails 中充当着重要的角色:它可以响应用户的请求,可以接收用户提交的表单,还可以访问模型的数据,并传递给 View。Grails 在 MVC 三方面的具体内容,将在后面的例子中做详细介绍。
Grails 预备知识
1、熟练使用常见的 HTML 标签;
2、有一定的 Web 开发基础(理解表单提交 POST/GET 、理解Session会话);
3、Java 语言或者 Groovy 语言的基础;
4、 Hibernate、Mybatis;
Grails 安装配置
1、下载 Grails 安装程序,将压缩包解压到硬盘上,并设置环境变量 GRAILS_HOME
官网下载 grails-3.3.0.zip
由于国内下载较慢,用我们米扑科技的美国服务器下载了,上传了百度云盘,方便您下载
百度网盘下载: grails-3.3.0.zip
2、设置 GRAILS_HOME 环境变量,然后把 %GRAIS_HOME%\bin 加到 System 的 Path 变量中
解压zip
unzip grails-3.3.0.zip
sudo cp -r grails-3.3.0 /opt/
配置环境变量
vim /etc/profile
GRAILS_HOME=/opt/grails-3.3.0
export PATH=$GRAILS_HOME/bin:$PATH
使其生效:
source /etc/profile
验证安装:
$ grails -v
| Grails Version: 3.3.0
| Groovy Version: 2.4.11
| JVM Version: 1.8.0_121
从上面版本可看出,Grails 是基于Groovy 和 Java,她们三个是好基友,哈哈
3、在控制台下输入 grails help,如果能看到 Grails 的命令列表,Grails 的安装配置就算成功了
$ grails help Usage (optionals marked with *):' grails [environment]* [target] [arguments]*' | Examples: $ grails dev run-app $ grails create-app books | Available Commands (type grails help 'command-name' for more info): | Command Name Command Description ---------------------------------------------------------------------------------------------------- create-app Creates an application create-plugin Creates a plugin create-profile Creates a profile help Prints help information for a specific command list-profiles Lists the available profiles profile-info Display information about a given profile | Detailed usage with help [command]
Groovy 特点
1、无需“;”结尾(有“;”也不会报错);
2、简单数据类型,与 Java 相同;
Groovy 爬取网页
方式1)Groovy URL 爬取网页
/** * mimvp.com * 2015-11-09 */ class MimvpSpider { static def mimvp_url = "http://proxy.mimvp.com/exist.php" static def mimvp_url2 = "https://proxy.mimvp.com/exist.php" static main(args) { spider_http(MimvpSpider.mimvp_url) } // 不需要 groovyx.net.http.HTTPBuilder static spider_http(mimvp_url) { def connection = new URL(mimvp_url).openConnection() connection.setRequestMethod('GET') connection.doOutput = true def writer = new OutputStreamWriter(connection.outputStream) writer.flush() writer.close() connection.connect() def respText = connection.content.text println respText } }
方式2) Groovy HTTPBuilder 爬取网页
/** * mimvp.com * 2015-11-09 */ @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1' ) import groovyx.net.http.HTTPBuilder import static groovyx.net.http.ContentType.* import static groovyx.net.http.Method.* class MimvpSpider { static main(args) { spider_web(MimvpSpider.mimvp_url) } // 需要 groovyx.net.http.HTTPBuilder // 首先groovy请求http需要依赖HTTPBuilder模块儿,不知道怎么安装模块儿,辗转了半天,后来发现支持Grab语法,代码如下 static spider_web(mimvp_url) { def http = new HTTPBuilder('https://proxy.mimvp.com') // http://proxy.mimvp.com/free.php?proxy=out_hp http.ignoreSSLIssues() // 访问https网站,不需验证, module='http-builder', version='0.7.1' http.request(GET, TEXT) { uri.path="/free.php" // 请求路由 uri.query = ['proxy' : 'out_hp'] // 请求参数 response.success ={resp, reader-> println resp.statusLine.statusCode // 200 println resp.headers.'Expires' // Thu, 19 Nov 1981 08:52:00 GMT println resp.headers.'Vary' // Accept-Encoding System.out << reader // 网页正文 } response.failure={resp-> println resp.status } } } }
方式3)Groovy 通过代理爬取网页
/** * Groovy 支持 http * * 米扑代理示例: * http://proxy.mimvp.com/demo.php * * 米扑代理购买: * http://proxy.mimvp.com * * mimvp.com * 2015-11-09 */ @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1' ) import groovyx.net.http.HTTPBuilder import static groovyx.net.http.ContentType.* import static groovyx.net.http.Method.* import org.apache.http.auth.* class MimvpSpider { static def proxy_http = "http://208.92.93.218:1080" static def mimvp_url = "http://proxy.mimvp.com/exist.php" static def mimvp_url2 = "https://proxy.mimvp.com/exist.php" static main(args) { spider_proxy(MimvpSpider.mimvp_url, MimvpSpider.proxy_http) // http spider_proxy(MimvpSpider.mimvp_url2, MimvpSpider.proxy_http) // https } // 设置代理 static spider_proxy(mimvp_url, proxy) { def http = new HTTPBuilder(mimvp_url) // http.client.getCredentialsProvider().setCredentials( // new AuthScope("myproxy.com", 8080), // new UsernamePasswordCredentials("proxy-username", "proxy-password") // ) def proxy_type = proxy.split("://")[0] def proxy_ip = proxy.split("://")[1].split(":")[0] def proxy_port = proxy.split("://")[1].split(":")[1] proxy_port = proxy_port.toInteger() println proxy_type println proxy_ip println proxy_port // http.setProxy('myproxy.com', 8080, 'http') http.setProxy(proxy_ip, proxy_port, proxy_type) http.ignoreSSLIssues() // 访问https网站,不需验证, module='http-builder', version='0.7.1' http.request( GET, TEXT ){ req -> response.success = { resp, reader -> println "Response: ${reader.text}" } } } }
本示例采用的米扑代理,支持 http、https、socks4、socks5等多种协议,覆盖全球120多个国家,中国34个省市
推荐米扑代理: http://proxy.mimvp.com
参考推荐:
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-12-13 00:37:49
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Groovy 通过代理ip抓取网页 (米扑博客)