我正在尝试抓取这个网站
https://www.dailystrength.org/search?query=aspirin&type=discussion
为我拥有的项目获取数据集(使用阿司匹林作为占位符搜索项)。
我决定用 Jsoup 做一个爬虫。但问题是帖子是通过 Ajax 请求动态带来的。该请求是使用“显示更多”按钮发出的
此按钮会导致问题
当显示整个内容时,它应该看起来像这样,带有文本“所有消息已加载”
最终结果
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.*;
/**
*
* @author Ahmed
*/
public class Crawler {
public static void main(String args[]) {
Document search_result;
String requested[] = new String[]{"aspirin"/*, "Fentanyl"*/};
ArrayList<Newsfeed_item> threads = new ArrayList();
String query = "https://www.dailystrength.org/search?query=";
try {
for (int i = 0; i < requested.length; i++) {
search_result = Jsoup.connect(query+requested[i]+"&type=discussion").get();
Elements posts = search_result.getElementsByClass("newsfeed__item");
for (Element item : posts) {
Elements link=item.getElementsByClass("newsfeed__btn-container posts__discuss-btn");
Newsfeed_item currentItem=new Newsfeed_item();
currentItem.replysLink=link.attr("abs:href");
Document reply_result=Jsoup.connect(currentItem.replysLink).get();
Elements description = reply_result.getElementsByClass("posts__content");
currentItem.description=description.text();
currentItem.subject=requested[i];
System.out.println(currentItem);
}
}
} catch (IOException ex) {
Logger.getLogger(Crawler.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
这段代码只给了我几个显示的帖子,而不是隐藏的帖子。我知道 JSoup 不能用于此问题,因此我尝试查找 selenium 的来源以显示完整内容并下载它以进行爬网。
慕桂英546537
相关分类