Java 如何从web获取所有链接
我想从*vedeo.com/download?url获取所有链接= 但是,当我运行代码时,我只得到第一个。 如何获得所有链接?通过使用循环或任何东西,以及如何创建循环。。 有人能帮我吗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
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());
}
}
参考文献