Java 如何从web获取所有链接

Java 如何从web获取所有链接,java,android-studio,Java,Android Studio,我想从*vedeo.com/download?url获取所有链接= 但是,当我运行代码时,我只得到第一个。 如何获得所有链接?通过使用循环或任何东西,以及如何创建循环。。 有人能帮我吗 package com.example.root.mytestjsoup; import android.os.AsyncTask; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android

我想从*vedeo.com/download?url获取所有链接=

但是,当我运行代码时,我只得到第一个。 如何获得所有链接?通过使用循环或任何东西,以及如何创建循环。。 有人能帮我吗

package com.example.root.mytestjsoup;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class MainActivity extends AppCompatActivity {

    Button but;
    TextView text;

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

        but = (Button)findViewById(R.id.button);
        text = (TextView)findViewById(R.id.textView);

        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new scrap().execute();
            }
        });

    }

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

        String word;
        Elements link;
        Element linx;
        String linkHref;

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

            try {
                Document doc = Jsoup.connect("https://savedeo.com/download?url=https://www.youtube.com/watch?v=GQx7W3jrZiE").get();
                link = doc.select("a[data-event]");
                Elements div = doc.getElementsByAttribute("data-event");
                String attr = div.attr("href"); // when it change to data-event, it will got the value of data-event.

                word = attr;

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

            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            text.setText(word);
        }
    }


}
package com.example.root.mytestjsoup;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.Button;
导入android.widget.TextView;
导入org.jsoup.jsoup;
导入org.jsoup.nodes.Document;
导入org.jsoup.nodes.Element;
导入org.jsoup.select.Elements;
公共类MainActivity扩展了AppCompatActivity{
按钮但是;
文本查看文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
但是=(按钮)findViewById(R.id.Button);
text=(TextView)findViewById(R.id.TextView);
但是.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
新废料().execute();
}
});
}
公共类任务{
字符串字;
元素链接;
元素linx;
字符串链接href;
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
Document doc=Jsoup.connect(“https://savedeo.com/download?url=https://www.youtube.com/watch?v=GQx7W3jrZiE).get();
link=doc.select(“一个[数据事件]”);
Elements div=doc.getElementsByAttribute(“数据事件”);
字符串attr=div.attr(“href”);//当它更改为数据事件时,它将获得数据事件的值。
word=attr;
}捕获(例外e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
text.setText(word);
}
}
}

我认为下面这行代码无效

String attr = div.attr("href"); 
因为

Elements div = doc.getElementsByAttribute("data-event");
返回元素或其他元素的列表

解决方案

步骤1:您可以这样编写和设置条件

doc.select("a[href][data-event]")
这意味着选择一个包含href和数据事件的标记

步骤2:如果需要,可以循环元素

Elements links = doc.select("a[href][data-event]");
for (Element link : links) {
    //download from youtube|mp4|1280x720        
    if(link.text().contains("download"))//find the link with some texts
    {
        System.out.println("here is the element you need");
        System.out.println("\nlink : " + link.attr("href"));
        System.out.println("text : " + link.text());
    }
}
参考文献