我正在编写一个Android应用,该应用从网站获取相关数据并将其呈现给用户(html抓取)。该应用程序下载源代码并对其进行解析,以查找要存储在对象中的相关数据。我实际上使用JSoup进行了解析器,但事实证明,这在我的应用程序中真的很慢。而且,这些库往往很大,我希望我的应用程序轻巧。
我要解析的网页都具有相似的结构,并且我确切地知道我要寻找的标签。因此,我认为我不如下载源代码并逐行阅读它,并使用查找相关数据String.equals
。例如,如果html看起来像这样:
<textTag class="text">I want this text</textTag>
我会使用类似的方法来解析它:
private void interpretHtml(String s){
if(s.startsWidth("<textTag class=\"text\"")){
String text = s.substring(22, s.length() - 10);
}
}
但是,我对建立连接知之甚少(我见过人们使用HttpGet
s,但我不确定如何从中获取数据)。我已经搜索了很多时间,以查找有关如何进行这种解析的信息,但是大多数人经常诉诸于使用诸如JSoup,SAX等库来进行解析。
是否有人碰巧知道如何进行这样的解析,也许是一个例子?还是以这种方式解析源代码是个坏主意?请给我您的意见。
感谢您的时间。
这是我要怎么做:
StringBuffer text = new StringBuffer();
HttpURLConnection conn = null;
InputStreamReader in = null;
BufferedReader buff = null;
try {
URL page = new URL(
"http://example.com/");
// URLEncoder.encode(someparameter); use when passing params that may contain symbols or spaces use URLEncoder to encode it and conver space to %20...etc other wise you will get a 404
conn = (HttpURLConnection) page.openConnection();
conn.connect();
/* use this if you need to
int responseCode = conn.getResponseCode();
if (responseCode == 401 || responseCode == 403) {
// Authorization Error
Log.e(tag, "Authorization Error");
throw new Exception("Authorization Error");
}
if (responseCode >= 500 && responseCode <= 504) {
// Server Error
Log.e(tag, "Internal Server Error");
throw new Exception("Internal Server Error");
}*/
in = new InputStreamReader((InputStream) conn.getContent());
buff = new BufferedReader(in);
String line = "anything";
while (line != null) {
line = buff.readLine();
String found = interpretHtml(line);
if(null != found)
return found; // comment the previous 2 lines and this one if u need to load the whole html document.
text.append(line + "\n");
}
} catch (Exception e) {
Log.e(Standards.tag,
"Exception while getting html from website, exception: "
+ e.toString() + ", cause: " + e.getCause()
+ ", message: " + e.getMessage());
} finally {
if (null != buff) {
try {
buff.close();
} catch (IOException e1) {
}
buff = null;
}
if (null != in) {
try {
in.close();
} catch (IOException e1) {
}
in = null;
}
if (null != conn) {
conn.disconnect();
conn = null;
}
}
if (text.toString().length() > 0) {
return interpretHtml(text.toString()); // use this if you don't need to load the whole page.
} else return null;
}
private String interpretHtml(String s){
if(s.startsWidth("<textTag class=\"text\"")){
return s.substring(22, s.length() - 10);
}
return null;
}
问题内容: 不使用任何外部库,将网站的HTML内容提取为String的最简单方法是什么? 问题答案: 我目前正在使用此: 但不确定是否有更好的方法。
编辑: 大家好,我需要一些帮助。实际上,我想从url获取并使用一些有用的数据。我有一个网站,显示在特定地区的一些重大事故的信息。我想从那个网站上了解那些事故的详细情况。我将在Android MapView中显示它们,并带有接点。我该怎么做?我经历了这一切,但仍然无法做到这一点。
问题内容: 我正在开发一个从网站上抓取数据的应用程序,我想知道应该如何获取数据。具体来说,我需要包含在使用特定CSS类的许多div标签中的数据-目前(出于测试目的)我只是在检查 在HTML的每一行中-都可以,但是我不禁感到有更好的解决方案。 有什么好方法可以给类添加一行HTML并提供一些好方法,例如: 问题答案: “ JTidy是HTML Tidy的Java端口,HTML Tidy是HTML语法检
我正在尝试访问由Javascript创建的网页上的一些内容。然而,我希望访问的内容是在页面加载后由javascript创建的,因此当我尝试用Jsoup解析它时,无法找到这个Html源代码块。 我使用HtmlUnit获取Html源代码的代码如下: 但是当我运行它时,应该创建的Html没有被打印出来。我想知道如何获得这个由Javascript创建的Html源代码,使用HtmlUnit,然后获得所述结果
我如何只在Javascript中获得每个对象的名称和值?
我试图在这里使用JSOUP解析html标记。我对jsoup是新来的。基本上,我需要解析这些标记,获取这些标记中的文本,并应用class属性中提到的样式。 我正在创建一个SpannableStringBuilder,它可以创建子字符串,应用样式,并将它们附加到没有样式的文本中。 我不确定如何解析不在任何标记之间的字符串,例如“there are”和“worker from the”。 需要输出,例如