“南方小土豆”挤爆哈尔滨旅游市场,一个冬天让哈尔滨火出了圈,让全国观众看见了不一样的逆向旅游热,虽说我心驰神往,但是无奈加班敲代码,连休息的时间都没有。前段时间我通过用java写了一个美团爬虫程序,今天我 利用java的Kotlin库来写个美团商家爬虫,监控同行价格信息,并做出对比,了解同行竞争对手的信息。
爬虫程序的代码和步骤如下:
import java.net.URLConnection
import java.util.*
fun main(args: Array<String>) {
val proxyHost = "duoip" // 代理服务器地址
val proxyPort = 8000 // 代理服务器端口
val url = URL("meituan") // 爬取的网址
val proxyHost= "提取免费ip" // jshk.com.cn/mb/reg.asp?kefu=xjy&csdn
val proxy = Proxy(Proxy.Type.HTTP, java.net.InetSocketAddress(proxyHost, proxyPort))
val connection = URL(url).openConnection()
connection.setRequestProperty("Proxy-Connection", "Keep-Alive")
connection.setRequestProperty("User-Agent", "Mozilla/5.0")
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6")
val cookieParams = connection.getHeaderFields().get("Cookie").split(",")
if (cookieParams.isNotEmpty()) {
connection.setRequestProperty("Cookie", cookieParams.joinToString("; "))
}
connection.connect()
connection.responseCode
}
每行代码的解释如下:
1、val proxyHost = "duoip"
:指定代理服务器的地址为 duoip
。
2、val proxyPort = 8000
:指定代理服务器的端口为 8000
。
3、val url = URL("meituan")
:指定要爬取的网址为 meituan
。
4、val proxy = Proxy(Proxy.Type.HTTP, java.net.InetSocketAddress(proxyHost, proxyPort))
:创建一个代理对象,指定代理类型为 HTTP,代理地址为 duoip
,代理端口为 8000
。
5、val connection = URL(url).openConnection()
:创建一个 URLConnection 对象,指定要连接的网址为 meituan
。
6、connection.setRequestProperty("Proxy-Connection", "Keep-Alive")
:设置请求头的 “Proxy-Connection” 为 “Keep-Alive”,表示连接应该在请求完成后保持打开状态。
7、connection.setRequestProperty("User-Agent", "Mozilla/5.0")
:设置请求头的 “User-Agent” 为 “Mozilla/5.0”,表示客户端使用的浏览器类型。
8、connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
:设置请求头的 “Content-Type” 为 “application/x-www-form-urlencoded”,表示请求主体的类型。
9、connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6")
:设置请求头的 “Accept-Language” 为 “zh-CN,zh;q=0.8,en;q=0.6”,表示客户端接受的语言。
10、val cookieParams = connection.getHeaderFields().get("Cookie").split(",")
:获取响应头中的 “Cookie”,并以 “,” 分割,得到一个字符串数组。
11、if (cookieParams.isNotEmpty()) { connection.setRequestProperty("Cookie", cookieParams.joinToString("; ")) }
:如果 “Cookie” 不为空,设置请求头的 “Cookie” 为字符串数组中的元素,以 "; " 分隔。
12、connection.connect()
:建立连接。
13、connection.responseCode
:获取服务器返回的状态码。
上面就是全部的代码内容了,介绍的很详细,也许有一些不完善的地方,欢迎大佬随时指正,不说了,已经买好了去哈尔滨的机票了,趁着热度未减,我也当一回南方的小土豆,看看美丽的哈尔滨冰雪世界。