如何使用 jsoup 抓取 Facebook 页面帖子?

问题描述 投票:0回答:1

我正在尝试使用 jsoup 在 Spring boot 中抓取 Facebook 页面。

下面的方法返回一个空的 JSON:

@GetMapping("/test-json")
public String scrapeFacebookPageJson() throws IOException {
    try {
        String facebookPageUrl = "https://www.facebook.com/abcd"; // your URL 

        Document doc = Jsoup.connect(facebookPageUrl).get();
        Elements posts = doc.select(".post"); // 

        List<String> results = new ArrayList<>();
        for (Element post : posts) {
            results.add(post.text());
        }

        ObjectMapper objectMapper = new ObjectMapper();
        return objectMapper.writeValueAsString(results);
    } catch (IOException e) {
        e.printStackTrace(); // ou logue a exceção
        return "Erro ";
    }
}
java web-scraping jsoup
1个回答
0
投票

您的想法是查找具有

post
类的元素并获取其文本内容。乍一看似乎很合理。

使用 DevTools (F12) 查看 DOM 资源管理器中的示例 Facebook 页面。

body
内的所有元素都具有混淆的类名称(例如
x78zum5
)。因此,您查询包含
post
类的元素的策略将不起作用。

更不用说,当您第一次加载页面时,您仅加载带有 GDPR cookies 同意对话框的基本 HTML。它不包含太多 Facebook 页面内容,因为随后使用 JavaScript 加载。您必须研究动态网页抓取,这是 jsoup 无法做到的。

如果您想以编程方式从 FB 页面获取帖子,我认为您最好的选择是他们的 GraphQL API。您可能会对这个文档页面特别感兴趣:https://developers.facebook.com/docs/graph-api/reference/v19.0/page/feed

© www.soinside.com 2019 - 2024. All rights reserved.