Java 如何搜索网页以查找特定文本
我目前正在编写一个类似于烹饪书的java程序。我做了所有的东西,但不幸的是,我没有食谱 我到处找了找,找到了。我查看了资料来源,找到了包含配料、食谱和营养成分的线条 我记得在终端中使用了Java 如何搜索网页以查找特定文本,java,terminal,Java,Terminal,我目前正在编写一个类似于烹饪书的java程序。我做了所有的东西,但不幸的是,我没有食谱 我到处找了找,找到了。我查看了资料来源,找到了包含配料、食谱和营养成分的线条 我记得在终端中使用了grep,我很快发现lynx非常有用。这是我到目前为止所拥有的(示例页面) 要在第一次提到成分后获得100行:lynx-dump”http://allrecipes.com/Recipe/Potato-Crunchy-Tenders/| grep-n-a100“配料” 要获取“配料”的行号:lynx-dump”h
grep
,我很快发现lynx
非常有用。这是我到目前为止所拥有的(示例页面)
要在第一次提到成分后获得100行:lynx-dump”http://allrecipes.com/Recipe/Potato-Crunchy-Tenders/| grep-n-a100“配料”
要获取“配料”的行号:lynx-dump”http://allrecipes.com/Recipe/Beef-Tips-and-Noodles/| grep-n“配料”| cut-f1-d:
我已经做了一些例子,发现食谱在“配料”行之后开始6行,每隔一行就有一种新配料,如下所示:
“135:配料[66]编辑并保存
136-
137-原始配方可制作6份[67]更改份数
138-制作6份(美国)米制[68]调整配方
139-([69]帮助)
140-*[]
141-1/2杯油炸植物油
142-*[]
143-1 1/2杯牛奶
144-*[]
145-1个鸡蛋
146-*[]
147-1包(7.6盎司)大蒜味即食土豆泥
"
我的目标是以某种方式获得一个文本文件中的成分,我可以用java进行解析(我很熟悉)。我希望对食谱做同样的事情
通过这种方式,我可以为许多食谱自动执行此操作,因此我不必手动获取所有这些
在java中有没有一种更容易实现的方法
干杯。多亏了装满鳗鱼的气垫船,我观察了JSoup,它工作得非常好 今晚我已经解决了尽可能多的问题,下面是我想出的代码 要获取
增量列表
(扩展数组列表
):
公共静态ListofIngreents GetListofIngreents(最终字符串html){
要获取说明
(扩展数组列表
):
公共静态指令getInstructions(最终字符串html){
指令指令指令=新指令();
试一试{
元素body=Jsoup.connect(html.get().body();
Element elem=body.getElementsByAttributeValue(“itemprop”,“recipeInstructions”).first();
对于(元素e:elem.getElementsByTag(“li”)){
增加说明(如text());
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回仪表;
}
您可能需要解析网站的html,jsoup等工具可以帮助您。如果这是我的项目,我会用谷歌搜索,下载并尝试一下。
ListOfIngredients tmp = new ListOfIngredients();
try {
Element body = Jsoup.connect(html).get().body();
try {
for (Element elem : body.getElementsByAttributeValue("itemprop", "ingredients")) {
Elements ingredientAmtElements = elem.getElementsByClass("ingredient-amount");
String amount = null;
if (!ingredientAmtElements.isEmpty()) {
amount = ingredientAmtElements.first().text();
}
String ingredient = elem.getElementsByClass("ingredient-name").first().text();
if (!ingredient.equals("\u00a0")) {
tmp.add(new Ingredient(amount, ingredient));
}
}
} catch (NullPointerException e) {
e.printStackTrace();
}
} catch (IOException e1) {
e1.printStackTrace();
}
return tmp;
}