js提取指定网站内容(溢出:Jsoup无法解析整个网页中提取一些特定数据)
优采云 发布时间: 2022-04-06 07:25js提取指定网站内容(溢出:Jsoup无法解析整个网页中提取一些特定数据)
Question_Statement_Stack 溢出:
Jsoup 无法解析整个网页,因此我尝试提取的特定数据也丢失了。在我的项目中,我想从网页中提取一些特定数据。由于一些搜索过滤器/iframes/由于内容在 JS 中,我无法从网页中提取我真正需要的信息。
它只能提取文档的某些部分。我必须解析数以千计的网页,但我无法确定缺少哪些页面,即无法使用 Jsoup 完全解析。我必须手动查找未完全解析的页面,对于这样的 网站 我使用 Selenium 来模拟浏览器解析文档的工作。有什么方法可以找出 Jsoup 无法解析的页面类型?有一种方法可以表明整个文档还没有使用 Jsoup 进行解析。
我发现:1.无法使用 Javascript 加载页面。2.无法解析带有搜索过滤器的页面。3.不要用包装器解析页面。4.不会使用 iframe 解析页面。
但我无法定义特殊条件将它们重定向到 Selenium。即使我指出无法使用 Jsoup 加载 Javascript 页面,我也无法将所有页面重定向到 Selenium,因为它确实非常耗时并且大大降低了性能。
例如:搜索过滤器
搜索过滤器
搜索过滤器
搜索过滤器
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 links;
public BasicWebCrawler() {
links = new HashSet();
}
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/");
}
}