1、403状态码
403 Forbidden 是HTTP协议中的一个状态码(Status Code)。可以简单的理解为没有权限访问此站。
2、引发的异常报错
3、BUG原因
- 1.你的IP被列入黑名单
- 2.你在一定时间内过多地访问此网站(一般是用采集程序),被防火墙拒绝访问了
- 3.网站域名解析到了空间,但空间未绑定此域名
- 4.你的网页脚本文件在当前目录下没有执行权限
- 5.在不允许写/创建文件的目录中执行了创建/写文件操作
- 6.以http方式访问需要ssl连接的网址
- 7.浏览器不支持SSL 128时访问SSL 128的连接
- 8.在身份验证的过程中输入了错误的密码
- 9.DNS解析错误,手动更改DNS服务器地址
- 10.连接的用户过多,可以过后再试
- 11.服务器繁忙,同一IP地址发送请求过多,遭到服务器智能屏蔽
- 12.CC强力防护
4、解决方式
- 当你使用java程序检索其他网站上的内容时,如果其服务器设置了禁止抓取,或者其访问需要权限,
- 如果此时你去检索网页那么就会有异常该异常出现.
- 如果是服务器需要访问权限,比如说你要登录才能访问的网页,那么你抓取不了的.
- 如果是服务器端禁止抓取,那么这个你可以通过设置User-Agent来欺骗服务器
- connection.setRequestProperty(“User-Agent”, “Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)”);
/**
* @方法名称: importWeather
* @实现功能: 定时存入实时天气预报 TODO: 方法入参根据页面对象设置
* @create by zyw at 2022-03-19 14:04:31
**/
public void importComment() {
System.out.println("~~~~~~~~定时存入玉龙雪山美团评论~~~~~~~~~~");
HttpURLConnection conn = null;
BufferedReader reader = null;
//使用免费api查询美团评论数据,请求数据时需要提交的参数
Map<String, String> params = new HashMap();
StringBuilder stringBuilder = new StringBuilder();
try {
//存储返回结果
String strRead = null;
//开始连接
URL url = new URL(requestURL+offset);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//使用Get方式请求数据
conn.setRequestMethod("GET");
conn.connect();
//输入流获取返回数据
InputStream is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
while ((strRead = reader.readLine()) != null) {
stringBuilder.append(strRead);
}
JSONObject jsonObject = JSON.parseObject(stringBuilder.toString());
List<MeiTuanComment> MeiTuanlist = JSONObject.parseArray(jsonObject.getJSONArray("comments").toString(), MeiTuanComment.class);
List<YlxsPublicOpinionData> CommentList = new ArrayList<>();
for (int i = 0; i < MeiTuanlist.size(); i++) {
YlxsPublicOpinionData data = new YlxsPublicOpinionData();
if (MeiTuanlist.get(i).getStar()==50){
//好评
data.setPjFl("好评");
}else if (MeiTuanlist.get(i).getStar()<50&&MeiTuanlist.get(i).getStar()>20){
//中评
data.setPjFl("中评");
}else {
//差评
data.setPjFl("差评");
}
data.setID(UUID.randomUUID().toString().replace("-", "").substring(0, 20));
data.setPjDd("景区");
data.setName("玉龙雪山");
if (MeiTuanlist.get(i).getCommentTime()!=null){
data.setPjTime(new Date(new Long(new Long(MeiTuanlist.get(i).getCommentTime().substring(0,10)) * 1000)));
}
data.setPjUser(MeiTuanlist.get(i).getUserName());
data.setPjContent(removeNonBmpUnicodes(MeiTuanlist.get(i).getComment()));
data.setZancnt(Integer.parseInt(MeiTuanlist.get(i).getZanCnt()));
data.setReadcnt(Integer.parseInt(MeiTuanlist.get(i).getReadCnt()));
data.setQuality("true".equals(MeiTuanlist.get(i).getQuality())?1:0);
data.setAnonymous("true".equals(MeiTuanlist.get(i).getAnonymous())?1:0);
data.setPjSource("美团");
CommentList.add(data);
}
int p = ylxsPublicOpinionDataService.insertYlxsPublicOpinionDataList(CommentList);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn != null) {
conn.disconnect();
}
}
}
//去除表情
public static String removeNonBmpUnicodes(String s) {
return null == s ? null : s.replaceAll("[^\\u0000-\\uFFFF]", "");
}