簡體   English   中英

使用jsoup提交搜索查詢

[英]Submitting a search query using jsoup

<form action="http://www.lyricsfreak.com/search.php">
    <input name="a" value="search" type="hidden">
    <input type="hidden" name="type" value="song">
    <input type="text" name="q" class="searchinp" placeholder="Search artist, albums and songs">
    <input value="Search" type="submit" class="srchbtn searchst" data-tracking='["Search","Lyrics","Search button"]'>
    <a href="http://www.lyricsfreak.com/search.php" class="srchadv" data-tracking='["Search","Lyrics","Advanced search"]'>Advanced search</a>
</form>

我知道已經有人問過這個問題,但這對我不起作用。 實際上在這個站點上,當我什至將URL復制並粘貼到其他選項卡時,它首先顯示錯誤,然后在幾秒鍾后再次重新加載並顯示所需的頁面,因此我第一次嘗試時無法獲得該值。 如果有人可以給我任何解決方案,那將是很好。 如您所見,如果我犯了任何類型的錯誤,那么我對stackoverflow還是陌生的,對不起...

鏈接http://www.lyricsfreak.com/search.php不可用,這就是它顯示錯誤的原因。 當您說它有時列出之后,實際上發生的是重定向到主頁。 因此,而不是使用http://www.lyricsfreak.com/search.php你可以使用主頁鏈接http://www.lyricsfreak.com/

基於評論的樣本

好。 我想您想在使用jsoup從Java程序中搜索后讀取軌道。 lyricsfreak的問題在於它在返回結果之前先檢查源。 如果源查詢不是lyricsfreak.com,則將其重定向到access_error.htm,並使用以下腳本從此處重新提交,以在3.5秒后再次提交以獲取結果

<script type="text/javascript">
    var redirect_url = document.location.href.match(/\?(.*)/);
    redirect_url = redirect_url ? '/search.php?' + redirect_url[1] : '/';
    setTimeout(function() { document.location.href = (redirect_url); }, 3500);
</script>

因此,您可以在此處通過jsoup將referrer設置為“ lyricsfreak.com”,它將為您提供正確的結果,而不會出現access_error。 因此,示例代碼如下。 當然,您可以以更好的方式解析頁面,但這只是為了給您一個想法。

import java.util.ArrayList;
import java.util.List;

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

public class LyricsParser {

    public static void main(String[] args) throws Exception {

        String SEARCH_STRING = "Madonna";
        String URL = "http://www.lyricsfreak.com/search.php?a=search&type=song&q=";

        List<String> artists = new ArrayList<String>();
        List<String> songs = new ArrayList<String>();
        List<String> hits = new ArrayList<String>();

        Document doc = Jsoup.connect(URL + SEARCH_STRING)
                .referrer(URL + SEARCH_STRING).get();

        for(Element tracks : doc.select("td.colfirst")){
            for(Element links : tracks.getElementsByTag("a")){
                artists.add(links.text());
            }
        }

        for(Element tracks : doc.select("td > a.song")){
            for(Element links : tracks.getElementsByTag("a")){
                songs.add(links.text());
            }
        }

        for(Element tracks : doc.select("td.colast")){
            hits.add(tracks.text());
        }

        int length = artists.size();
        for(int i=0; i<length; i++){
            System.out.println("[" + artists.get(i) + ",\t" + songs.get(i) + ",\t" + hits.get(i+1) + "]");
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM