爬虫之伪装浏览器却依旧没有返回值

jsoup使用和浏览器一样的请求头,得到的数据却为空
浏览器的请求头:

img

我的请求头:

img

令人茫然的结果:

img

而浏览器是可以得到返回数据的:

img

【以下回答由 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字段,或者通过验证码来验证用户身份。如果目标网站对爬虫进行了防护,可能需要采用其他方法来绕过这些限制。

以下是一些常见的绕过方法:

  1. 设置合适的Referer和User-Agent字段,使其看起来更像真实的浏览器请求。
  2. 使用代理服务器,将请求转发到目标网站时改变请求的IP地址。
  3. 解析验证码,自动填写验证码或者使用识别工具自动识别验证码。

如果你确定目标网站对爬虫进行了防护,并且以上方法无效,那么可能需要通过其他方式获取目标网站的数据,或者寻找其他数据源来满足你的需求。

希望这些解决方案能够帮助你解决问题,如果还有任何疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^