jsoup使用和浏览器一样的请求头,得到的数据却为空
浏览器的请求头:
我的请求头:
令人茫然的结果:
而浏览器是可以得到返回数据的:
【以下回答由 GPT 生成】
确保你正确设置了请求头,包括user-agent、referer等字段。以下是一个示例代码:
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36";
String referer = "https://www.example.com";
Connection connection = Jsoup.connect(url)
.userAgent(userAgent)
.header("Referer", referer)
// 添加其他请求头参数
.timeout(5000) // 设置连接超时时间
.ignoreContentType(true) // 忽略返回类型
.followRedirects(true); // 跟随重定向
Document document = connection.get();
确保你的请求头与浏览器的请求头相似,这样服务器才能正确处理你的请求。
如果目标网站需要登录或者有一些特殊的Cookie验证,你需要在请求头中设置相应的Cookie信息。以下是一个示例代码:
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36";
String referer = "https://www.example.com";
String cookie = "sessionID=1234567890"; // 替换为你的Cookie信息
Connection connection = Jsoup.connect(url)
.userAgent(userAgent)
.header("Referer", referer)
.header("Cookie", cookie)
// 添加其他请求头参数
.timeout(5000) // 设置连接超时时间
.ignoreContentType(true) // 忽略返回类型
.followRedirects(true); // 跟随重定向
Document document = connection.get();
请确保你设置的Cookie信息是有效的,并且与浏览器请求时的Cookie一致。
如果目标网站返回的状态码是重定向状态(如302),你需要确保Jsoup能够自动跟随重定向,并继续请求。以下是一个示例代码:
String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36";
String referer = "https://www.example.com";
Connection connection = Jsoup.connect(url)
.userAgent(userAgent)
.header("Referer", referer)
// 添加其他请求头参数
.timeout(5000) // 设置连接超时时间
.ignoreContentType(true) // 忽略返回类型
.followRedirects(true); // 跟随重定向
Connection.Response response = connection.execute();
Document document = response.parse();
通过执行connection.execute()
方法,可以获取到包含重定向信息的Response对象,然后调用response.parse()
可以将响应解析为文档。
有些网站会对爬虫进行防护,例如通过检查请求头中的Referer或User-Agent字段,或者通过验证码来验证用户身份。如果目标网站对爬虫进行了防护,可能需要采用其他方法来绕过这些限制。
以下是一些常见的绕过方法:
如果你确定目标网站对爬虫进行了防护,并且以上方法无效,那么可能需要通过其他方式获取目标网站的数据,或者寻找其他数据源来满足你的需求。
希望这些解决方案能够帮助你解决问题,如果还有任何疑问,请随时提问。