如何使用Jsoup从网站上的链接检索网址?
好吧,我完成了我的Yelp扫描仪,一切都运行良好。我想现在要做的就是让程序检索每一个环节每一个企业的网址,进入该页面,并扫描其是否包含:如何使用Jsoup从网站上的链接检索网址?
xlink:href="#30x30_bullhorn"></use>
我非常有好吧,我将如何去做这件事,但是,我似乎无法找到一个jSoup方法来检索链接的URL。在页面的HTML中是否有地址会有url?我对HTML不太熟练,所以我看到的90%都是胡言乱语。这里有一个例子链接,如果你想看看我指的是什么。
https://www.yelp.com/search?find_loc=nj&start=10是主页,我需要获取页面https://www.yelp.com/biz/la-cocina-newark的网址。橙色的扩音器就是我试图让它恢复的东西。这里是我的代码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;
}
}
}
了解如何使用Chrome的开发者工具检查元素,因为它使得它非常容易找到的DOM元素(你说你不熟悉HTML,那么你肯定将在此之后,并使用Inspect是一个伟大的学习工具)。将检查员集中在“立即查看”按钮上,您会看到:
<a href="https://www.yelp.com/biz_redir?cachebuster=1479918865&s=1c73b4bdc9110f6e6dc72fff48cd6379d6eaac0cd6d15794a9414e546ad5a927&src_bizid=U2eO8yFSc9YTf_SPnog8cw&url=http%3A%2F%2Fwww.lacocinanewark.com%2F%23%21menu%2Fcl69&website_link_type=cta" rel="nofollow" target="_blank" class="ybtn ybtn--primary ybtn--small ybtn-cta" data-component-bound="true">View Now</a>
。
你必须弄清楚如何遍历这个,childNodes()
将有助于遍历。然后,您可以使用getElementsByClass("ybtn ybtn--primary ybtn--small ybtn-cta")
来获取链接所在的特定类,然后使用Element
类的.attr()
方法获取href:.attr("href");
。
检查工具已帮助吨!它很精确地突出了它在页面上的位置,所以我确切地知道在哪里看。 –
@BrandonWoodruff。现代网页如此复杂,以至于在没有类似检查员的情况下建造任何类型的刮板都是可怕的。 –