我正试图从网站上查找药品清单。 我正在使用JSOUP来解析Html。
这是我的代码:
URL url = new URL("http://www.medindia.net/drug-price/index.asp?alpha=a");
Document doc1 = Jsoup.parse(url, 0);
Elements rows = doc1.getElementsByAttributeValue("style", "padding-left:5px;border-right:1px solid #A5A5A5;");
for(Element row : rows){
String htm = row.text();
if(!(htm.equals("View Price")||htm.contains("Show Details"))) {
System.out.println(htm);
System.out.println();
}
}
这是我得到的输出:
P.S。 这不是完整的输出但由于我无法拍摄完整输出的屏幕截图,我只是显示了它。
我需要知道两件事:
问题1。为什么我在每个药物名称前面都有一个额外的空间?为什么我会在某些药物的名称后获得额外的新药?
问题2. 如何解决此问题?
答案 0 :(得分:2)
一些事情:
for
循环来解决这个问题。htm.trim()
!htm.isEmpty()
).replace
)这是固定代码:
for(char page='a'; page <= 'z'; page++) {
String urlString = String.format("http://www.medindia.net/drug-price/index.asp?alpha=%c", page);
URL url = new URL(urlString);
Document doc1 = Jsoup.parse(url, 0);
Elements rows = doc1.getElementsByAttributeValue("style", "padding-left:5px;border-right:1px solid #A5A5A5;");
for(Element row : rows){
String htm = row.text().replace((char) 160, ' ').trim();
if(!(htm.equals("View Price")||htm.contains("Show Details"))&& !htm.isEmpty())
{
System.out.println(htm.trim());
System.out.println();
}
}
}
答案 1 :(得分:1)
做一件事:
在syso中使用trim功能:System.out.println(htm.trim());
更新:
经过大量的努力,我能够解析所有这80种药物: -
URL url = new URL("http://www.medindia.net/drug-price/index.asp?alpha=a");
Document doc1 = Jsoup.parse(url, 0);
Elements rows = doc1.select("td.ta13blue");
Elements rows1 = doc1.select("td.ta13black.tbold");
int cnt=0;
for(Element row : rows){
cnt++;
String htm = row.text().trim();
if(!(htm.equals("View Price")||htm.contains("Show Details") || htm.startsWith("Drug"))) {
System.out.println(cnt+" : "+htm);
System.out.println();
}
}
for(Element row1 : rows1){
cnt++;
String htm = row1.text().trim();
if(!(htm.equals("View Price")||htm.contains("Show Details") || htm.startsWith("Drug"))) {
System.out.println(cnt+" : "+htm);
System.out.println();
}
}
答案 2 :(得分:0)
1)通过 style 获取元素是非常危险的;
2)调用ROWS而不是FIELDS列表更危险:)
3)打开页面,您可以看到仅在“黑名称”之后添加额外的行,未包含在锚链接中的项目名称。
问题是,该行中的第二个字段不是Show Details
也不是View Price
,甚至不是空的......它是:
<td bgcolor="#FFFFDB" align="center"
style="padding-left:5px;border-right:1px solid #A5A5A5;">
</td>
这是一个空格字符串。像这样修改你的代码:
for(Element row : rows){
String htm = row.text().trim(); // <!-- This one
if(!
(htm.equals("View Price")
|| htm.contains("Show Details")
|| htm.equals(" ")) // <!-- And this one
) {
System.out.println(htm);
System.out.println();
}
}