2016-11-23 3 views
0

Okay, damit habe ich meinen Yelp-Scanner fertiggestellt, und alles läuft super. Was ich jetzt tun möchte, ist das Programm haben die URL für jeden Link zu jedem Geschäft abrufen, um zu dieser Seite zu gehen, und suchen Sie nach, ob es enthält:Wie kann ich mithilfe von Jsoup eine URL von einem Link auf einer Website abrufen?

xlink:href="#30x30_bullhorn"></use>

Ich habe so ziemlich ein eine gute Idee, wie ich das machen werde, aber ich kann anscheinend keine jSoup-Methode finden, die die URL eines Links abrufen würde. Gibt es irgendwo im HTML der Seite die URL? Ich bin überhaupt nicht sehr gut mit HTML vertraut, so dass 90% von dem, was ich sehe, gibbing ist. Hier ist ein Beispiellink, wenn Sie herausfinden möchten, was ich meine.

https://www.yelp.com/search?find_loc=nj&start=10 ist die Hauptseite, die ich brauche, um die URL für die Seite https://www.yelp.com/biz/la-cocina-newark zu erhalten. Das orange Megafon ist das, was ich versuche, es zu holen. Hier ist mein Code btw:

import java.util.ArrayList; 
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.Scanner; 

public class YelpScrapper 
{ 
    public static void main(String[] args) throws IOException, Exception 
    {   
     //Variables 
     String description; 
     String location; 
     int pages; 
     int parseCount = 0; 
     Document document; 

     Scanner keyboard = new Scanner(System.in); 

     //Perform a Search 
     System.out.print("Enter a description: "); 
     description = keyboard.nextLine(); 

     System.out.print("Enter a state: "); 
     location = keyboard.nextLine(); 

     System.out.print("How many pages should we scan? "); 
     pages = keyboard.nextInt(); 

     String descString = "find_desc=" + description.replace(' ', '+') + "&"; 
     String locString = "find_loc=" + location.replace(' ', '+') + "&"; 
     int number = 0; 

     String url = "https://www.yelp.com/search?" + descString + locString + "start=" + number; 
     ArrayList<String> names = new ArrayList<String>(); 
     ArrayList<String> address = new ArrayList<String>(); 
     ArrayList<String> phone = new ArrayList<String>(); 

     //Fetch Data From Yelp 
     for (int i = 0 ; i <= pages ; i++) 
     { 

      document = Jsoup.connect(url).get(); 

      Elements nameElements = document.select(".indexed-biz-name span"); 
      Elements addressElements = document.select(".secondary-attributes address"); 
      Elements phoneElements = document.select(".biz-phone"); 

      for (Element element : nameElements) 
      { 
       names.add(element.text()); 
      } 

      for (Element element : addressElements) 
      { 
       address.add(element.text()); 
      } 

      for (Element element : phoneElements) 
      { 
       phone.add(element.text()); 
      } 

      for (int index = 0 ; index < 10 ; index++) 
      { 
       System.out.println("\nLead " + parseCount); 
       System.out.println("Company Name: " + names.get(parseCount)); 
       System.out.println("Address: " + address.get(parseCount)); 
       System.out.println("Phone Number: " + phone.get(parseCount)); 

       parseCount = parseCount + 1; 
      } 

      number = number + 10; 

     } 
    } 
} 

Antwort

0

Erfahren Sie, wie das Element Inspizieren von Chrome Entwickler-Tool verwenden, da es ihm unglaublich einfach zu lokalisieren Elemente im DOM macht (Sie sagen, Sie mit HTML nicht vertraut sind, auch Sie sicherlich wird danach sein und Inspect ist ein großartiges Lernwerkzeug). Wenn Sie den Inspektor auf die Schaltfläche "Jetzt anzeigen" fokussieren, gelangen Sie zu diesem:

<a href="https://www.yelp.com/biz_redir?cachebuster=1479918865&amp;s=1c73b4bdc9110f6e6dc72fff48cd6379d6eaac0cd6d15794a9414e546ad5a927&amp;src_bizid=U2eO8yFSc9YTf_SPnog8cw&amp;url=http%3A%2F%2Fwww.lacocinanewark.com%2F%23%21menu%2Fcl69&amp;website_link_type=cta" rel="nofollow" target="_blank" class="ybtn ybtn--primary ybtn--small ybtn-cta" data-component-bound="true">View Now</a>.

Sie müssen herausfinden, wie Sie bis zu diesem durchlaufen, und childNodes() wird hilfreich sein beim Durchfahren. Dann können Sie getElementsByClass("ybtn ybtn--primary ybtn--small ybtn-cta") verwenden, um zu der bestimmten Klasse zu gelangen, in der sich die Verknüpfung befindet, und dann die .attr()-Methode der Element-Klasse verwenden, um die href: .attr("href"); zu erhalten.

+0

Das Inspektor-Tool hat Tonnen von Hilfe! Es ist schön, dass es genau anzeigt, wo es auf der Seite ist, also weiß ich genau, wo ich suchen soll. –

+0

@BrandonWoodruff genau. Moderne Webseiten sind so komplex, dass es fürchterlich wäre, irgendeinen Schaber ohne etwas wie den Inspektor zu bauen. –

Verwandte Themen