gpt4 book ai didi

java - Web Crawler 在电子邮件链接上被阻止

转载 作者:行者123 更新时间:2023-11-29 08:38:50 24 4
gpt4 key购买 nike

我正在使用 jsoup(使用这个 tutorial)在 Java 中制作网络爬虫。

我面临的问题是爬虫将每个链接都带入元素循环,其中一些是电子邮件地址。因此,当我尝试在电子邮件地址上使用 Jsoup.connect(URL) 时,我收到一条错误消息,告诉我只能使用 http 或 https 请求。

如何在获取电子邮件地址链接时停止我的程序进行递归?

主要代码如下:

public class Main {

public static DB db = new DB();

public static void main(String[] args) throws SQLException, IOException{
db.runSql2("TRUNCATE Record;");
processPage("http://www.mit.edu");
}

public static void processPage(String URL) throws SQLException,IOException{
String sql = "select * from Record where URL = '" +URL+"'";
ResultSet rs = db.runSql(sql);
if(rs.next()){

} else {
sql = "INSERT INTO `Crawler`.`Record` " + "(`URL`) VALUES " + "(?);";
PreparedStatement stmt = db.conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1,URL);
stmt.execute();

Document doc = Jsoup.connect(URL).get();

if(doc.text().contains("research")){
System.out.println(URL);
}

Elements questions = doc.select("a[href]");
for(Element link:questions){
if(link.attr("href").contains("mit.edu")){
System.out.println(link.attr("abs:href"));
processPage(link.attr("abs:href"));
}
}

}
}

最佳答案

您可以通过查看链接是否以 http 开头来检查链接是否为 URL。因为您有一个绝对 URL(使用 abs:href),并且它以 http 开头,所以它只能是 http 或 https URL(而不是电子邮件地址的链接,或FTP 站点,包含一些您不想要的其他垃圾。)

例如,将您的 for 循环更新为:

for (Element link : questions) {
String href = link.attr("abs:href");
if (href.contains("mit.edu") && href.startsWith("http")) {
System.out.println(href);
processPage(href);
}
}

此外,我倾向于在每个 processPage 调用周围放置一个 try/catch,这样如果您在获取页面时遇到错误(例如网络超时或其他原因),您的整个应用程序都不会不会崩溃。

关于java - Web Crawler 在电子邮件链接上被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com