如何在网页抓取中获取内容

时间:2015-09-25 01:05:05

标签: java algorithm web-crawler scrapy-spider

enter image description here

嗨!我正在尝试为蜘蛛算法实现这个伪代码来探索网络。 我需要一些关于伪代码下一步的想法:“使用SpiderLeg来获取内容”, 我在另一个类 SpiderLeg 中有一个方法,它有一个方法来获取该网页的所有网址,但想知道如何在这个类中使用它?

// method to crawl web and print out all URLs that the spider visit
public List<String> crawl(String url, String keyword) throws IOException{
    String currentUrl;
    // while list of unvisited URLs is not empty
    while(unvisited != null ){
        // take URL from list 
        currentUrl = unvisited.get(0);
       //using spiderLeg to fetch content   
        SpiderLeg leg = new SpiderLeg();
    }
    return unvisited;
}

干杯!!将尝试...但是我尝试了这个没有使用队列D.S,它几乎工作,但不会在搜索某些单词时停止程序。

当它发现它只显示网页的链接而不是所有找到该单词的特定URL时。 想知道可以这样做吗?

private static final int MAX_PAGES_TO_SEARCH = 10;
  private Set<String> pagesVisited = new HashSet<String>();
  private List<String> pagesToVisit = new LinkedList<String>();



public void crawl(String url, String searchWord)
  {
      while(this.pagesVisited.size() < MAX_PAGES_TO_SEARCH)
      {
          String currentUrl;
      SpiderLeg leg = new SpiderLeg();
      if(this.pagesToVisit.isEmpty())
      {
          currentUrl = url;
          this.pagesVisited.add(url);
      }
      else
      {
          currentUrl = this.nextUrl();
      }
      leg.getHyperlink(currentUrl);
      boolean success = leg.searchForWord(searchWord);
      if(success)
      {
          System.out.println(String.format("**Success** Word %s found at %s", searchWord, currentUrl));
          break;
      }
      this.pagesToVisit.addAll(leg.getLinks());
  }
  System.out.println("\n**Done** Visited " + this.pagesVisited.size() + " web page(s)");
  }

1 个答案:

答案 0 :(得分:0)

抓取算法基本上是Breadth first search,您需要维护一个未访问过的URL的队列,每次访问您对其进行排队的URL时,您需要对您找到的任何未访问的URL进行排队来自您的HTML解析器(SpiderLeg)。

将URL添加到队列的条件取决于您,但通常您需要将URL与种子URL的距离保持为停止点,这样您就不会永远遍历Web。这些规则还可能包含您对搜索感兴趣的细节,以便您只添加相关的URL。