问题_陈述_堆栈溢出:
Jsoup无法解析整个网页,因此我尝试提取的特定数据也丢失了。在我的项目中,我想从网页中提取一些特定数据。由于某些搜索过滤器/ iframe /由于内容位于JS中,因此我无法从网页中提取我真正需要的信息。
它只能提取文档的某些部分。我必须解析成千上万的网页,而我无法识别丢失了哪些页面,即无法使用Jsoup进行完全解析。我必须手动查找哪个页面没有被完全解析,对于此类网站,我使用Selenium模拟浏览器的工作以解析文档。是否有任何方法可以找出无法使用Jsoup解析哪种类型的页面?有一种方法可以指示尚未使用Jsoup解析整个文档。
我发现: 1.无法加载带有Javascript的页面。 2.无法解析带有搜索过滤器的页面。 3.不分析带有包装的页面。 4.不会解析使用iframe的页面。
但是我无法定义将它们重定向到Selenium的特殊条件。即使我指出无法使用Jsoup加载Javascript页面,我也无法将所有页面重定向到Selenium,因为这确实很耗时,并且大大降低了性能。
例如: https://www.teachers-teachers.com/search-jobs-搜索过滤器
https://jobs.rockwellcollins.com/job-search-results/-搜索过滤器
http://www.kaplan.com.sg/careers/-Javascript
http://jobs.ecolab.com/job-search-results/-搜索过滤器
http://www.autoanything.com/jobs/opportunities-搜索过滤器
http://www.dksh.com/global-en/home/careers/career-opportunities-iframe
https://www.expereo.com/careers/-iframe
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.HashSet;
public class BasicWebCrawler {
private HashSet<String> links;
public BasicWebCrawler() {
links = new HashSet<String>();
}
public void getPageLinks(String URL) {
//4. Check if you have already crawled the URLs
//(we are intentionally not checking for duplicate content in this example)
if (!links.contains(URL)) {
try {
//4. (i) If not add it to the index
if (links.add(URL)) {
System.out.println(URL);
}
//2. Fetch the HTML code
Document document = Jsoup.connect(URL).followRedirects(true)
.header("Accept-Encoding", "gzip, deflate")
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0")
.maxBodySize(0)
.timeout(600000)
.get();
//3. Parse the HTML to extract links to other URLs
System.out.println(document);
} catch (IOException e) {
System.err.println("For '" + URL + "': " + e.getMessage());
}
}
}
public static void main(String[] args) {
new BasicWebCrawler().getPageLinks("https://jobs.rockwellcollins.com/job-search-results/");
}
}