我正在尝试创建一个程序,在页面上查找扩音器图标,以便我可以通过if语句运行它。我正在查看的页面是https://www.yelp.com/biz/sabor-unido-newark。在Chrome上使用检查器工具,我找到了扩音器图标的html:
<span aria-hidden="true" style="fill: #ea5c1d; width: 30px; height: 30px;" class="icon icon--30-bullhorn icon--size-30">
<svg class="icon_svg">
<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#30x30_bullhorn"></use>
</svg>
</span>
我正在使用JSoup,并且一直在努力寻找能够实现这一目标的正确方法。基本上我想要它说,&#34;如果页面有扩音器图标,那么就这样做。&#34;我尝试了很多Element选择器和hasAttr()
方法,但似乎都没有。这很好,可能是因为我不是很流利的HTML,也许我的选择器语法错了。无论如何,你怎么看?
这是我与之合作的当前迭代:
import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Attribute;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.Scanner;
public class BullHorn
{
public static void main(String[] args) throws IOException, Exception, RuntimeException
{
String linkUrl = "https://www.yelp.com/biz/mega-pizza-newark?osq=pizza";
Document linkClick = Jsoup.connect(linkUrl).timeout(3000).get();
boolean bullhorn;
for(Element element : linkClick.getAllElements())
{
for(Attribute attribute : element.attributes())
{
if (attribute.getValue().equalsIgnoreCase("#30x30_bullhorn"))
{
bullhorn = true;
}
}
}
if (bullhorn = true)
{
System.out.println("True");
}
else
{
System.out.println("False");
}
}
}
问题是,即使在没有实际拥有扩音器图标的链接上,这也总是会返回。
答案 0 :(得分:1)
if(bullhorn = true)
中存在语法错误,请记住=
是赋值运算符,==
检查基元之间的相等性。您也可以将if语句写为if(bullhorn)
。
在旁注,但仍然很重要:
如果你找到了扩音器,你应该从for循环中break
,没有必要继续遍历每个元素。
例如:
public class BullHorn {
public static void main(String[] args) throws IOException, Exception, RuntimeException {
String linkUrl = "https://www.yelp.com/biz/mega-pizza-newark?osq=pizza";
Document linkClick = Jsoup.connect(linkUrl).timeout(3000).get();
boolean bullhorn;
for(Element element : linkClick.getAllElements()) {
for(Attribute attribute : element.attributes()) {
if (attribute.getValue().equalsIgnoreCase("#30x30_bullhorn")) {
bullhorn = true;
// no need to continue looping, we've found bullhorn
break;
}
}
// no need to continue looping, we've found bullhorn
if(bullhorn == true) {
break;
}
}
if (bullhorn == true) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}