Java span html标记的模式编译器
嗨,我在亚马逊从事云计算项目。我一直在做的一部分代码是从amazon获取用户愿望列表。 由于存在权限限制,我所做的是在给定愿望列表url的情况下提取整个页面源代码。为了提取itemID,我使用了如下模式编译Java span html标记的模式编译器,java,html,jsoup,Java,Html,Jsoup,嗨,我在亚马逊从事云计算项目。我一直在做的一部分代码是从amazon获取用户愿望列表。 由于存在权限限制,我所做的是在给定愿望列表url的情况下提取整个页面源代码。为了提取itemID,我使用了如下模式编译 Pattern p = Pattern.compile("/dp/(\\w+)/"); Matcher matcher = p.matcher(content); 这很简单,现在它正确地列出了该愿望列表中的所有产品及其itemId。 我还需要每个的价
Pattern p = Pattern.compile("/dp/(\\w+)/");
Matcher matcher = p.matcher(content);
这很简单,现在它正确地列出了该愿望列表中的所有产品及其itemId。
我还需要每个的价格。根据页面来源,价格是
<span class="a-size-base a-color-price a-text-bold">
$7.19
</span>
$7.19
我需要为这一个写一个模式,但我完全困惑和卡住了。我不擅长正则表达式。谁能帮忙吗。我在网上看到了href的参考资料,但我认为这对我不起作用
多亏了dkatzel,我找到了这个工具Jsoup。我尝试了在线转换,所以当我执行CSS Query div时,我得到了所需的输出。但是如何在java程序中硬编码呢。我有jsoup罐子 一个简单的表达式不管用吗
\\$\\d+(?:\\.\\d+)
\\$
匹配文本$
\\d+
匹配数字
(?:\\.\\d+)
匹配可能的小数
我想,整个匹配就是您要寻找的,除非您不需要美元符号,否则您可以使用捕获组并获取第一组(即
\\$(\\d+(?:\\\.\\d+)
)或查找(即(?)简单的表达式不起作用吗
\\$\\d+(?:\\.\\d+)
\\$
匹配文本$
\\d+
匹配数字
(?:\\.\\d+)
匹配可能的小数
我想,整个匹配就是您要寻找的,除非您不需要美元符号,否则您可以使用捕获组并获取第一组(即\\$(\\d+(?:\\\.\\d+)
)或查找(即(?使用Jsoup的替代答案)
Element e = doc.select("span.a-size-base").first();
在项目中或编译时包含jsoup-1.x.x.jar
,并添加以下导入
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
使用Jsoup的替代答案
Element e = doc.select("span.a-size-base").first();
在项目中或编译时包含jsoup-1.x.x.jar
,并添加以下导入
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
我建议你使用一个HTML解析库来为你做这一切。(除非你需要自己解析它来完成学业)我不需要自己解析它。我的主要项目完全不同。那么这些价格出现在什么上下文中?它们总是在那种带有那些类名的span标记中吗?是的。这些是唯一包含价格的标记。我可以附加页面源代码,但它将非常长。我建议您使用HTML解析库为你做这一切。(除非你需要自己解析它来完成学业)我不需要自己解析它。我的主要项目完全不同。那么这些价格出现在什么上下文中?它们总是在带有这些类名的span标记中吗?是的。这些是唯一包含价格的标记。我可以附加页面源代码,但它将非常长。我做了List price=new ArrayList();Pattern pr=Pattern.compile(“\\$\\d+(?:\\\.\\d+);Matcher priceMatcher=pr.Matcher(content);while(priceMatcher.find()){if(!price.contains(priceMatcher.group(1)))price.add(priceMatcher.group(1));}System.out.println(“在迭代中获取的价格”+计数);for(字符串s:price){System.out.println(s);}
提供IndexOutOfBoundsException(“无组”+组);@sa_nyc使用.group(0)
,因为它是整个匹配项。如果要匹配整个标记,您可以使用以下选项:\\s*(\\$\\d+(?:\\.\\d+)\\s*
,然后使用.group(1)
因为有一个捕获组。通过一个小的修改(即标记中双引号的转义字符)工作得很好。感谢您节省了时间。如果我不想匹配$SYMBOL did,我该怎么办?List price=new ArrayList();Pattern pr=Pattern.compile(\$\\d+(?:\\\\\.\\d+));Matcher priceMatcher=pr.Matcher(content);while(priceMatcher.find()){if(!price.contains(priceMatcher.group(1)))price.add(priceMatcher.group(1));}System.out.println(“在迭代中获取的价格”+count);for(字符串s:price){System.out.println(s);}
提供IndexOutOfBoundsException(“无组”+组);@sa_nyc使用.group(0)
,因为它是整个匹配项。如果要匹配整个标记,您可以使用它:\\s*(\\$\\d+(?:\\.\\d+)\\s*
然后使用.group(1)
因为有一个捕获组。通过一个小的修改(即标记中双引号的转义字符)工作得很好。感谢您节省时间。如果我不想匹配$symbol,我该怎么办