【问题标题】:JSOUP extract an absolute URL in AndroidJSOUP在Android中提取绝对URL
【发布时间】:2015-05-15 20:15:52
【问题描述】:

我一直在到处寻找。尝试了很多“解决方案”,但没有一个有帮助。 我需要从 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代码的一部分。正如我所说,它包含很多网址,所以像doc.select("a").first(); 这样的想法将无济于事。

我想从&lt;h2 class="p-job-title"&gt; 部分提取所有网址(它在代码中多次出现,因为它是在某个网站上搜索的结果)我也尝试过doc.select("h2.p-job-title a[href]");,但输出是Android developer (junior/senior),我需要@ 987654327@ 最好是绝对形式)我认为 www.mywebsite + url 只是由一些 concat 或其他东西制作的,所以它不应该很难)。

编辑:我的整个活动课程的代码

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();
        }
    }
}

【问题讨论】:

  • 你的选择有误,应该选择“h3 a[href]”
  • 它没有改变任何东西。输出现在是“Starware Firma Informatyczna”,但我需要获取一个 URL。
  • 您能否以正确格式向我们展示您正在使用的确切代码?
  • 这是我需要从中提取代码的网站:infopraca.pl/praca?q=android+developer&lc=Wroclaw
  • 您正在尝试从您的元素中获取文本。很明显 jobNames.text();将返回文本。

标签: java android html parsing jsoup


【解决方案1】:

您正在尝试从您选择的元素中获取文本。 mLista.add(jobNames.text() + "\n"); 这是错误的。如果您需要链接,您必须从您选择的元素中获取attributehref

试试这样的

Elements class= doc.getElementsByClass("p-job-title");
Elements link= class.select("a");
String url = link.attr("href");

【讨论】:

  • 这么明显,但我找不到!谢谢:)
  • 对于从问题标题中搜索答案的人:attr("href") 可以返回相对路径。如果我们想确保获得绝对路径,我们需要使用attr("abs:href")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-23
  • 2015-07-19
  • 2023-03-08
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多