java - 解析jsoup url android

标签 java android html css jsoup

我可以按照文档解析 href url:

Document doc = Jsoup.connect("http://jsoup.org").get();

Element link = doc.select("a").first();
String relHref = link.attr("href"); // == "/"
String absHref = link.attr("abs:href"); // "http://jsoup.org/"

但我尝试从该网页的 css 中提取链接 url:http://multiplayer.it/notizie/133685-assassins-creed-unity-ecco-come-assassins-creed-unity-sfrutta-lhardware-di-nuova-generazione.html

我需要获取图像横幅的链接。 id 是:id="content_heading" 但图像是由 css 加载的。

<div id="content_heading" style="background: url(http://images.multiplayer.it/thumbs/images/2014/06/10/assassins_creed_unity_jpg_1600x0_upscale_q85.jpg) center center; background-size: cover;">

如何提取网址?这是异步任务

private class ContentViewImgUrl extends AsyncTask<String,String,String> {

 @Override
 protected void onPreExecute()
 {  

 }

@Override
protected String doInBackground(String... params) {


try {
 final  Document doc = Jsoup.connect(URL).timeout(30000).get();
 runOnUiThread(new Runnable() {
  @Override
  public void run() {
    Element rootElement = doc.body().getElementById("top_ads_container");
    Elements elements = rootElement.getElementsByTag("header");
    for(Element element : elements){

    imgUrlPost = element.select("div.content_heading").text();



   }
}
});


} catch (Exception e) {

 Log.e("ESEMPIO", "ERROR");
}
 return null; // MODIFIED HERE
}

@Override
 protected void onPostExecute(String result)
{   
  Toast.makeText(SingleActivity.this, "url "+ imgUrlPost, Toast.LENGTH_SHORT).show();
}

}

toast 不起作用.. 它只返回 Url 而没有别的。 谢谢

更新:

private class ContentViewImgUrl extends AsyncTask<Void,Void,Void> {

    final Pattern pattern = Pattern.compile("url\\((.+?)\\)");

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(Void... params) {

        try {
            final Document doc = Jsoup.connect(URL).timeout(30000).get();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    String url = doc.getElementById("content_heading").attr("style").toString();
                    Matcher matcher = pattern.matcher(url);
                    matcher.find();
                    System.out.println(matcher.group(1));
                }
            });
           urlnew = new URL(matcher.group(1));
           postBitmap = BitmapFactory.decodeStream(urlnew.openConnection().getInputStream());
        } catch (Exception e) {
            Log.e("ESEMPIO", "ERROR");
        }
        return null; // MODIFIED HERE
    }

    @Override
    protected void onPostExecute(Void result) {   
        Toast.makeText(SingleActivity.this, "url "+ urlnew, Toast.LENGTH_SHORT).show();
        postImage = (ImageView) findViewById(R.id.postimage);
        postImage.setImageBitmap(postBitmap);
    }
}

我将 urlnew 声明为 public URL urlnew 并将 postBitmap 声明为位图

第二个更新:

private class ContentViewImgUrl extends AsyncTask<Void,Void,Void> {

        final Pattern pattern = Pattern.compile("url\\((.+?)\\)");

        @Override
        protected void onPreExecute() {}

        @Override
        protected String doInBackground(Void... params) {

            try {
                final Document doc = Jsoup.connect(URL).timeout(30000).get();

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String url = doc.getElementById("content_heading").attr("style").toString();
                        Matcher matcher = pattern.matcher(url);
                        if(matcher.find()){

                        System.out.println(matcher.group(1));

                        indirizzostringaimg = matcher.group(1);
                        imgloader = ImageLoader.getInstance();
                        imgloader.init(ImageLoaderConfiguration.createDefault(getActivity()));
                        System.out.println(urlnew);
                       } else {
                      Toast.makeText(getActivity(), "Pic url error",                  Toast.LENGTH_SHORT).show();
                       }
                    }
                });

            } catch (Exception e) {
                Log.e("ESEMPIO", "ERROR");
            }
            return null; // MODIFIED HERE
        }

        @Override
        protected void onPostExecute(Void result) {   

           if(matcher.find()){
            DisplayImageOptions opt = new DisplayImageOptions.Builder()
            .showStubImage(R.drawable.refresh)
            .showImageForEmptyUri(R.drawable.refresh)
            .cacheInMemory()
            .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
            .cacheOnDisc()
           .build();

            imgloader.displayImage(indirizzostringaimg, postimage_main, opt);
         } else {
            Toast.makeText(getActivity(), "Pic url error",                  Toast.LENGTH_SHORT).show();
         }
        }
    }

最佳答案

这是一个完整的工作示例。获取您感兴趣的部分。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;


public class Main {

    public static void main(String[] args) {
        String html = "<div id=\"content_heading\" style=\"background: url(http://images.multiplayer.it/thumbs/images/2014/06/10/assassins_creed_unity_jpg_1600x0_upscale_q85.jpg) center center; background-size: cover;\"></div>";
        final Pattern pattern = Pattern.compile("url\\((.+?)\\)");

        try {
            Document doc = Jsoup.parse(html);
            String url = doc.getElementById("content_heading").attr("style").toString();

            Matcher matcher = pattern.matcher(url);
            matcher.find();
            System.out.println(matcher.group(1));
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

更新

private class ContentViewImgUrl extends AsyncTask<String,String,String> {

    final Pattern pattern = Pattern.compile("url\\((.+?)\\)");

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... params) {

        try {
            final Document doc = Jsoup.connect(URL).timeout(30000).get();

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    String url = doc.getElementById("content_heading").attr("style").toString();
                    Matcher matcher = pattern.matcher(url);
                    matcher.find();
                    System.out.println(matcher.group(1));
                }
            });
        } catch (Exception e) {
            Log.e("ESEMPIO", "ERROR");
        }
        return null; // MODIFIED HERE
    }

    @Override
    protected void onPostExecute(String result) {   
        Toast.makeText(SingleActivity.this, "url "+ imgUrlPost, Toast.LENGTH_SHORT).show();
    }
}

关于java - 解析jsoup url android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24326837/

相关文章:

java - 如何使 CircleImageView 在 NavigationView 抽屉中可点击

javascript - 包含 lightbox.js 时灯箱无法工作

java - 接口(interface)方法的返回值(无参数)是异步获取的。能实现吗?

java - EasyMock 和返回泛型类的方法

android - Android 中的 HTML5 视频背景显示黑色

android - 通用图像加载器 : Can I use cache but also refresh it?

javascript - 我如何附加表格(tr th : even and tr td:even and th:odd and td:odd) to a new table

javascript - 总和单选按钮显示/隐藏基于总和的某些 div

java - 使用 utf-8 时在文件中保留固定长度的字符串空间?

java - 在 Mac 上安装 JRE 1.7 - 当已安装版本 1.8 时