我正在使用Jsoup从页面中提取数据:
现在我想获得属于span标记的所有类属性。但我无法得到所有这些。我随机获得一个属性,重复3次。我不知道为什么。
package scrapers;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* @author kushagrabehere
*/
public class ReviewCounter {
void ReviewCounters() throws IOException
{
Document doc=Jsoup.connect("https://www.justdial.com/Indore/Shahi- Bhog-Caterers-Opposite-Sayaji-Behind-Hotel-Park-Vijay-Nagar-Vijay-Nagar/0731PX731-X731-120525133215-B7M1_BZDET?xid=SW5kb3JlIENhdGVyZXJz").get();
Elements contactNumber=doc.select("a.tel.ttel");
System.out.println("contact :" );
String cContact;
for(Element numbers:contactNumber){
cContact=numbers.getElementsByTag("span").attr("class");
System.out.println("contact :" + cContact);
}
我希望获得联系号码中显示的所有类名:
答案 0 :(得分:0)
首先,您需要检查是否获得完整的HTML,
如果使用JS渲染HTML,则JSOUP无法访问该元素,因为Jsoup不会自行执行JS代码。
检查html create 1文件并搜索所需的DOM是否可用。
尝试类似下面的内容
FileWriter fw = new FileWriter(new File("C:/demo.html"));
Document doc=Jsoup.connect("https://www.justdial.com/Indore/Shahi- Bhog-Caterers-Opposite-Sayaji-Behind-Hotel-Park-Vijay-Nagar-Vijay-Nagar/0731PX731-X731-120525133215-B7M1_BZDET?xid=SW5kb3JlIENhdGVyZXJz").get();
fw.write(doc.toString());
Elements contactNumber=doc.getElementsByClass("a.tel.ttel");
System.out.println("contact :" );
String cContact;
for(Element numbers:contactNumber){
cContact=numbers.getElementsByTag("span").attr("class");
System.out.println("contact :" + cContact);
}
fw.close();
答案 1 :(得分:0)
首先你应该按照Alpesh Jikadra的建议在他的回答中做,并检查这些信息是否是动态加载的。
你这样做:
Elements contactNumber=doc.select("a.tel.ttel");
这将选择具有tel和ttel类的所有锚元素。当我在浏览器中打开页面时,我只找到一个这样的元素。因此,当您对所有找到的a
元素进行循环时,您可能只执行一次。
您要做的是在循环内的每个a
元素中查找所有span元素。像这样:
for(Element numbers:contactNumber){
Elements digitSpans = numbers.select("span.mobilesv");
for (Element digitSpan : digitsSpans){
String digitClasses = digitSpan.attr("class");
//look up which icon class is which number or do do whatever
}
}
请注意,上面的代码未经过测试,只是在答案框中输入。我没让它跑。
BTW:你也可以通过Element.classNames()获取Jsoup中的各个类(参见Jsoup get class name)