gpt4 book ai didi

java - 使用 jsoup 解析 HTML : differences between Android and Java

转载 作者:太空狗 更新时间:2023-10-29 15:07:56 24 4
gpt4 key购买 nike

我在使用 jsoup 时遇到了问题,因为我已经用 Java 编写了解析来自网站的一些信息的代码并且运行良好。
但是我在Android中复制代码(将其封装在asyncTask中)但是文档与使用jsoup.connect()解析的doc Java不同。
为什么?

一些代码行是:

Document doc = null;
try {
doc=Jsoup.connect("myurl").timeout(10000).get();
} catch (IOException e) {
e.printStackTrace();
}

Element body = doc.body();
Element figlio = body.child(0);
Elements span_elements = figlio.getElementsByTag("span");

我在这里发布了完整的 java 和 android 代码。

Java

public class MainClass {

public static void main(String[] args){
String ProductName = "";
String Description = "";
String LongDescription = "";
String Category = "";

Document doc = null;
try {
doc=Jsoup.connect("http://eandata.com/lookup/9788820333584/").timeout(10000).get();

} catch (IOException e) {
e.printStackTrace();
}

Element body = doc.body();

Element figlio = body.child(0);

Elements span_elements = figlio.getElementsByTag("span");

for(Element p : span_elements) {

if((p.id().compareTo("")) == 0 || p.id() == null) {
continue;
}

else if(p.id().compareTo("upc_prod_product_o") == 0) {
ProductName = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_description_o") == 0) {
Description = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_cat_path_o") == 0) {
Category = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_url_o") == 0) {
continue;
}

else if(p.id().compareTo("upc_prod_long_desc_o") == 0) {
LongDescription = p.text();
continue;
}

}

System.out.println(ProductName);
System.out.println(Description);
System.out.println(Category);
System.out.println(LongDescription);

这是代码 ANDROID(我在 AndroidManifest 中包含了 INTERNET PERMISSION)安卓

public class MainActivity extends Activity {

//Campi necessari per il Parser HTML
String ProductName = "";
String Description = "";
String LongDescription = "";
String Category = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

HttpHTML task3 = new HttpHTML();
task3.execute();
}

public class HttpHTML extends AsyncTask<Void,Void,Void> {

@Override
protected void onPreExecute() {
}

@Override
protected Void doInBackground(Void...params) {
Document doc = null;
try {
doc=Jsoup.connect("http://eandata.com/lookup/9788820333584/").timeout(10000).get();
} catch (IOException e) {
e.printStackTrace();
}

//Accedo all'elemento <body> del documento
Element body = doc.body();
System.out.println(body.text());

//Prendo l'elemento figlio del body
Element figlio = body.child(0);
System.out.println(figlio.text());

Elements span_elements = figlio.getElementsByTag("span");

for(Element p : span_elements) {

if((p.id().compareTo("")) == 0 || p.id() == null) {
continue;
}

else if(p.id().compareTo("upc_prod_product_o") == 0) {
ProductName = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_description_o") == 0) {
Description = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_cat_path_o") == 0) {
Category = p.text();
continue;
}

else if(p.id().compareTo("upc_prod_url_o") == 0) {
continue;
}

else if(p.id().compareTo("upc_prod_long_desc_o") == 0) {
LongDescription = p.text();
continue;
}

}

System.out.println(ProductName);
System.out.println(Description);
System.out.println(Category);
System.out.println(LongDescription);

return null;
}

@Override
protected void onProgressUpdate(Void... values) {
}

@Override
protected void onPostExecute(Void result) {

}

}




}

最佳答案

在不知道您访问的 URL 的情况下,这只是一个猜测,但我敢打赌 5 美元我是对的:服务器正在根据您的用户代理字符串发回不同的 HTML,并且因为您没有明确设置它,它是默认的。而且Android和Java之间的默认是不同的。服务器正在努力提供帮助,并为您提供针对 Android 的移动优化 HTML。

确保在构建请求时指定用户代理。查看Connection.userAgent()文档了解详情。我通常将其设置为我当前的浏览器。

关于java - 使用 jsoup 解析 HTML : differences between Android and Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20036280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com