我正在尝试创建一个Discord机器人,该机器人搜索用户"!price item"
输入的商品,然后给我一个价格,以后可以在代码中使用。我想出了如何将html
代码放入字符串或doc文件中,但是我一直在努力寻找一种仅提取价格的方法。
这是代码:
@Override
public void onMessageReceived(MessageReceivedEvent event) {
String html;
System.out.println("I received a message from " +
event.getAuthor().getName() + ": " +
event.getMessage().getContentDisplay());
if (event.getMessage().getContentRaw().contains("!price")) {
String input = event.getMessage().getContentDisplay();
String item = input.substring(9).replaceAll(" ", "%20");
String URL = "https://www.google.lt/search?q=" + item + "%20price";
try {
html = Jsoup.connect(URL).userAgent("Mozilla/49.0").get().html();
html = html.replaceAll("[^\\ ,.£€eur0123456789]"," ");
} catch (Exception e) {
return;
}
System.out.println(html);
}
}
最大的问题是我正在使用Google搜索,因此价格在html
代码中不在同一位置。有没有办法我只能从html代码中提取(numbers + EUR) or (a euro sign + price)
?
答案 0 :(得分:0)
您可以轻松地执行此操作以抓取该网站。这是一个使用 JSOUP 进行操作的简单示例:
public class Main {
public static void main(String[] args) {
try {
String query = "oneplus";
String url = "https://www.google.com/search?q=" + query + "%20price&client=firefox-b&source=lnms&tbm=shop&sa=X";
int pricesToRetrieve = 3;
ArrayList<String> prices = new ArrayList<String>();
Document document = Jsoup.connect(url).userAgent("Mozilla/5.0").get();
Elements elements = document.select("div.pslires");
for (Element element : elements) {
String price = element.select("div > div > b").text();
String[] finalPrice = price.split(" ");
prices.add(finalPrice[0] + finalPrice[1]);
pricesToRetrieve -= 1;
if (pricesToRetrieve == 0) {
break;
}
}
System.out.println(prices);
} catch (IOException e) {
e.printStackTrace();
}
}
}
该段代码将输出:
[347,10€,529,90€,449,99€]
如果您想获取更多信息,只需将JSOUP连接到 Google Shop 网址,添加所需查询,然后使用JSOUP进行抓取即可。在这种情况下,我将Google Shop for OnePlus报废了以检查其价格,但您也可以获取购买它的网址,完整的产品名称等。在这段代码中,我想检索在Google Shop中索引的前3个价格,将它们添加到String的ArrayList中。然后,在将其添加到ArrayList之前,我先将检索到的文本按“空格”分割,这样我就可以获取所需的信息,即价格。
这是一个简单的报废示例,如果您需要任何其他信息,请随时询问!而且,如果您想了解有关使用JSOUP check this link进行剪贴的更多信息。
希望这对您有所帮助!