JSOUP 在 Android 中提取绝对 URL
JSOUP extract an absolute URL in Android
我到处找。尝试了很多 "solutions" 但其中 none 有帮助。
我需要从 html 代码中提取子网站的 url 地址。该代码包含很多 url,因此我需要以某种方式缩短结果列表,以便它只留下我需要的链接。
详情:
<li class="container results-list-item clear-me ">
<div class="job-offer-content container h-card">
<div class="position-head container">
<div class="container ">
<h2 class="p-job-title">
<a href="/praca/android-developer-junior-senior/wroclaw/11636002" rel="nofollow"
title="praca Android developer (junior/senior) dolnośląskie" class="job-offer ">
<strong class="keyword">Android</strong> <strong class="keyword">developer</strong> (junior/senior)
</a>
</h2>
<h3 class="p-name company">
<a href="/pracodawca/starware-firma-informatyczna-praca/843242">
Starware Firma Informatyczna
</a>
</h3>
这只是html代码的一部分。正如我所说,它包含很多 url,因此像 doc.select("a").first();
这样的想法无济于事。
我想从 <h2 class="p-job-title">
部分中提取所有 url (它在代码中多次发生,因为它是在某些网站上搜索的结果)我也试过 doc.select("h2.p-job-title a[href]");
但是输出是 Android developer (junior/senior)
并且我需要 /pracodawca/starware-firma-informatyczna-praca/843242
并且充其量是绝对形式)我认为 www.mywebsite + url 只是由一些 concat 或其他东西制作的所以它应该太难了)。
编辑:我的整个 activity class' 代码
public class ListaActivity extends ActionBarActivity{
StartActivity startActiv;
private List<String> mLista = new ArrayList<>();
private ListView mListView;
private MiastaListAdapter mAdapter;
public Elements jobName, jobName2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_miast);
mListView = (ListView) findViewById(R.id.lista_miast);
new NewThread().execute();
mAdapter = new MiastaListAdapter(this, mLista);
mListView.setAdapter(mAdapter);
}
public class NewThread extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... arg) {
String doURLwork = startActiv.nazwaStanowiska;
String doURLplace = startActiv.nazwaMiejscowosci;
Document doc;
try {
doc = (Document) Jsoup.connect("http://www.infopraca.pl/praca?q=" + doURLwork + "&lc=" + doURLplace)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0").get();
jobName = doc.select("h2.p-job-title a[href]"); //infopraca
for (Element jobNames : jobName) {
mLista.add(jobNames.text() + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
mAdapter.notifyDataSetChanged();
}
}
}
您正在尝试从所选元素中获取文本。 mLista.add(jobNames.text() + "\n");
这是错误的。如果您需要链接,您必须从您选择的元素中获取 attribute
href
。
尝试这样的事情
Elements class= doc.getElementsByClass("p-job-title");
Elements link= class.select("a");
String url = link.attr("href");
我到处找。尝试了很多 "solutions" 但其中 none 有帮助。 我需要从 html 代码中提取子网站的 url 地址。该代码包含很多 url,因此我需要以某种方式缩短结果列表,以便它只留下我需要的链接。
详情:
<li class="container results-list-item clear-me ">
<div class="job-offer-content container h-card">
<div class="position-head container">
<div class="container ">
<h2 class="p-job-title">
<a href="/praca/android-developer-junior-senior/wroclaw/11636002" rel="nofollow"
title="praca Android developer (junior/senior) dolnośląskie" class="job-offer ">
<strong class="keyword">Android</strong> <strong class="keyword">developer</strong> (junior/senior)
</a>
</h2>
<h3 class="p-name company">
<a href="/pracodawca/starware-firma-informatyczna-praca/843242">
Starware Firma Informatyczna
</a>
</h3>
这只是html代码的一部分。正如我所说,它包含很多 url,因此像 doc.select("a").first();
这样的想法无济于事。
我想从 <h2 class="p-job-title">
部分中提取所有 url (它在代码中多次发生,因为它是在某些网站上搜索的结果)我也试过 doc.select("h2.p-job-title a[href]");
但是输出是 Android developer (junior/senior)
并且我需要 /pracodawca/starware-firma-informatyczna-praca/843242
并且充其量是绝对形式)我认为 www.mywebsite + url 只是由一些 concat 或其他东西制作的所以它应该太难了)。
编辑:我的整个 activity class' 代码
public class ListaActivity extends ActionBarActivity{
StartActivity startActiv;
private List<String> mLista = new ArrayList<>();
private ListView mListView;
private MiastaListAdapter mAdapter;
public Elements jobName, jobName2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lista_miast);
mListView = (ListView) findViewById(R.id.lista_miast);
new NewThread().execute();
mAdapter = new MiastaListAdapter(this, mLista);
mListView.setAdapter(mAdapter);
}
public class NewThread extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... arg) {
String doURLwork = startActiv.nazwaStanowiska;
String doURLplace = startActiv.nazwaMiejscowosci;
Document doc;
try {
doc = (Document) Jsoup.connect("http://www.infopraca.pl/praca?q=" + doURLwork + "&lc=" + doURLplace)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0").get();
jobName = doc.select("h2.p-job-title a[href]"); //infopraca
for (Element jobNames : jobName) {
mLista.add(jobNames.text() + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
mAdapter.notifyDataSetChanged();
}
}
}
您正在尝试从所选元素中获取文本。 mLista.add(jobNames.text() + "\n");
这是错误的。如果您需要链接,您必须从您选择的元素中获取 attribute
href
。
尝试这样的事情
Elements class= doc.getElementsByClass("p-job-title");
Elements link= class.select("a");
String url = link.attr("href");