"); //-->
暑假开始了,家长们又要规划亲子旅游啦。面对携程、美团、飞猪众多平台如何选择适合的酒店呢?
根据要去的地方和行程安排选酒店,建议第一天选择一家交通方便的经济型酒店快速入住休整下,第二天再换到旅游期间长住的酒店。
开始选择酒店的时候,预算是很重要的,可以先做一个筛选,然后再从筛选的结果总选择选择性价比高的酒店。同时要关注酒店的评价,但是因为有大量的灌水,建议大家重点关注“有待改善”的部分,这个能将一些真实的问题反映出来,任何酒店都有需要改进的地方,可以斟酌下看看这些问题是不是得到了酒店的解决,或者这些问题是不是能够接受的。
这么多酒店如果手动去分析处理也是很累的,可以用爬虫程序去平台采集自动整理数据,就可以快速筛选啦,程序如下:
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;
import java.util.Random;
class ProxyAuthenticator extends Authenticator {
private String user, password;
public ProxyAuthenticator(String user, String password) {
this.user = user;
this.password = password;
}
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user, password.toCharArray());
}
}
/**
* 注意:下面代码仅仅实现HTTP请求链接,每一次请求都是无状态保留的,仅仅是这次请求是更换IP的,如果下次请求的IP地址会改变
* 如果是多线程访问的话,只要将下面的代码嵌入到你自己的业务逻辑里面,那么每次都会用新的IP进行访问,如果担心IP有重复,
* 自己可以维护IP的使用情况,并做校验。
*/
public class Demo {
public static void main(String args[]) throws Exception {
// Change in Java 8 Update 111 以上版本需要下面代码
// System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "false");
// System.setProperty("jdk.http.auth.proxying.disabledSchemes", "false");
// 要访问的目标页面
String targetUrl = "https://hotels.ctrip.com";
// 代理服务器(产品官网 www.16yun.cn)
String proxyServer = "t.16yun.cn";
int proxyPort = 31111;
// 代理验证信息
String proxyUser = "username";
String proxyPass = "password";
try {
URL url = new URL(targetUrl);
Authenticator.setDefault(new ProxyAuthenticator(proxyUser, proxyPass));
// 创建代理服务器地址对象
InetSocketAddress addr = new InetSocketAddress(proxyServer, proxyPort);
// 创建HTTP类型代理对象
Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
// 设置通过代理访问目标页面
HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxy);
// 设置Proxy-Tunnel
// Random random = new Random();
// int tunnel = random.nextInt(10000);
// connection.setRequestProperty("Proxy-Tunnel",String.valueOf(tunnel));
// 解析返回数据
byte[] response = readStream(connection.getInputStream());
System.out.println(new String(response));
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
}
}
/**
* 将输入流转换成字符串
*
* @param inStream
* @return
* @throws Exception
*/
public static byte[] readStream(InputStream inStream) throws Exception {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inStream.close();
return outSteam.toByteArray();
}
}专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
汽车远程信息处理平台设计方案
Python首次超越Java成第二最受欢迎的编程语言
TurboJ描述文件
基于Java的脏字过滤器设计
新帖求交流
[原创]张孝祥的java.javascript网页开发
基于Android的车载娱乐系统构架
意法半导体推出STeID Java Card™可信电子身份证和电子政务解决方案
想要学好大数据需掌握这十二大技术
索尼爱立信机型开发指南
2023年12月编程语言排行榜出炉,C#有望成为2023年度编程语言
好消息,在8031 core上执行java.
Java Verified Program支持的设备列表
最新编程语言排行榜出炉:Java历史首次被赶出前三
Eclipse 平台入门
基于Android的车载信息娱乐系统构架
HTTP协议及HTTP代理知识点
一种基于Java技术的信息家电远程控制方法的实现
2月编程语言榜单:Go首度进入前十名
我从GitHub上看到了编程语言八年变迁史 | Reddit 30.7k
Java Script的工作原理是什么?怎样用它来生成简单的
微软正在考虑将UWP应用移植至Java:Android也能用
世界排行第一的编程语言:java迎来25岁生日
新版编程语言Java 19正式发布:增加支持RISC-V架构和虚拟线程