java - 为什么通过查看源代码获取 html 代码与使用 Java 代码不同?
问题描述
我正在尝试通过以下代码获取 html 内容:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
public class Main {
public static String getHtmlContent(String urlAddress) {
URL url;
try {
url = new URL(urlAddress);
URLConnection conn = url.openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder stringBuilder = new StringBuilder();
while ((inputLine = br.readLine()) != null) {
stringBuilder.append(inputLine);
}
br.close();
return stringBuilder.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
String urlEmpik = getHtmlContent("https://myduolife.com/shop/products/1/780,duolife-keratin-hair-complex.html");
System.out.println(urlEmpik);
}
}
问题是当我进入这个网站并在网站上制作(点击鼠标)“查看源代码”时,HTML 内容与我使用我的(上面的)Java 代码时不同。此代码适用于大多数网站,但有些网站无法正常工作,我的意思是 HTML 源代码不同。不知是什么原因?也许它与某些网站上的某些特殊安全性有关?谢谢你的帮助。
解决方案
有一个答案,即通常称为“专有握手”和“专有服务器”。可以做的不多,但是有一些方法可以增加服务器的 HTML 响应更接近程序员在使用浏览器时获得的响应的可能性。大多数情况下,请记住 Web 服务器是由现实世界中的开发人员编写的,并且许多更受欢迎的网站会根据谁在询问来微调收到的 HTML 响应。如果是 Java 程序,您可能会被告知立即离开。
注意:为此学习 Selenium 会有所帮助,但 Selenium 有其他问题和错误 - 并且很复杂。
在许多服务器上工作的一个途径是“用户代理”(并注意假冒是否有效):
HttpURLConnection con = (HttpURLConnection) url.openConnection();
String USER_AGENT = "Chrome/61.0.3163.100";
con.setRequestMethod("GET");
con.setRequestProperty("User-Agent", USER_AGENT);
return new BufferedReader(new InputStreamReader(con.getInputStream()));
推荐阅读
- python - Pandas:从一系列数组创建新的数据框列
- vue.js - 第一次单击时提交状态为空白。Vuex
- bokeh - 如何根据给定的 x 值显示悬停信息?
- ruby-on-rails - 如何在会话结束前删除购物车和 LineItems?
- performance - 如何在golang中测量函数的执行时间,不包括等待时间
- java - 乘以投影矩阵后如何渲染三角形
- python - python字典中的通配符
- python - 将 HTML 页面连接到 Django 页面
- java - .setIcon() 导致 NullPointerException
- python - 用于自动化浏览器交互的 Selenium 包