使用Jsoup在网站中提交搜索

时间:2018-06-28 10:25:50

标签: android html search jsoup

我想创建一个应用程序,使我可以在此天气站点中搜索城市。 我希望您返回与执行的搜索相对应的站点。 我尝试使用EditText和Button来执行此操作,但是搜索似乎不起作用,因为返回的页面与初始页面相同。

我该如何解决这个问题?

这是我的代码:

final EditText editText = findViewById(R.id.edit);
        final TextView textView = findViewById(R.id.testo);
        Button button = findViewById(R.id.clicca);
        button.setOnClickListener(new View.OnClickListener() {
            Connection.Response res = null;
            Document doc;
            @Override
            public void onClick(View v) {
                try {
                    doc = Jsoup.connect("https://www.ilmeteo.it/meteo/cerca")
                            .data("citta", "bari")
                            .post();

                } catch (IOException e) {
                    e.printStackTrace();
                }
                textView.setText(doc.location());
            }
        });

这是网站的HTML代码:

<div id="search">
<a id="search-logo" href="https://www.ilmeteo.it" title="IL Meteo - Home Page"></a>
<a id="search-arrow" href="javascript:;" onclick="toggleSearchMenu('main');"></a>
<form id="form-search0" name="search0" action="https://www.ilmeteo.it/meteo/cerca" method="get" onsubmit="return CheckSearchForm0()">
<input id="search-main" name="citta" value="" size="17" maxlength="64" class="txtSearch" onfocus="this.className='txtSearch';openSearchMenu('main');virginSearch=false;" onblur="if(this.value=='')this.className='txtSearch txtSearchE'" title="Cerca comune o località" autocomplete="Off" tabindex="1" onkeyup="ajax_showOptions(this,'type=IT&amp;sort=smart',event)" type="text">
</form>
<a id="search-button" href="javascript:;" onclick="$('#form-search0').submit()"></a>

<div id="fav-search-cont"><span id="fav-search"></span></div>

</div>

编辑

谢谢大家!您的答案解决了我的问题:) 但是我在另一个气象站遇到问题。我该如何从另一个站点执行与以前相同的操作?

P.S。:此站点的问题是强制单击城市以进行搜索,并且URL中城市旁边有一个代码,例如“ http://www.meteo.it/meteo/roma-58091”。

这是第二个站点的HTML代码:

<div class="pksrc">
			<form class="search-form" onsubmit="return false">
				<fieldset class="icon-lens">
					<input type="hidden" id="searchid" disabled="" value="">
					<input type="hidden" id="searchtarget" value="_blank">
					<input type="text" class="query " id="searchinput" name="search" value="" placeholder="Cerca località" autocomplete="off">
					<input type="submit" value="submit">
				</fieldset>
			</form>
			<div id="search-menu"></div>
			<ul id="search-option">
				<li><a href="/meteo/milano-15146" title="Milano">Milano</a></li>
				<li><a href="/meteo/roma-58091" title="Roma">Roma</a></li>
				<li><a href="/meteo/napoli-63049" title="Napoli">Napoli</a></li>
			</ul>
		</div>

2 个答案:

答案 0 :(得分:0)

String city = "Bari";
String url = "https://www.ilmeteo.it/meteo/cerca?citta="+ city;

Document doc = Jsoup.connect(url).get(); 
List<Element> rows = doc.select("table[class=datatable] > tbody > tr[id*='']");

for (Element row : rows) {
    System.out.println(row.text());
}

样本输出:

13 pioggia e schiarite 25.3° NW 35 / 36 forte51% 0.1 mm modeste0% 3070m1008mb 27°>10km buona 51 7.9
14 pioggia e schiarite 25.5° NW 34 / 35 forte50% 0.1 mm modeste0% 3050m1008mb 27°>10km buona 50 7.6
15 poco nuvoloso 25.5° NW 32 / 33 forte50% - assenti -0% 3070m1008mb 27°>10km buona 50 6.5
16 poco nuvoloso 25.4° NW 31 / 32 forte49% - assenti -0% 3100m1008mb 27°>10km buona 49 5.1
17 sereno 25° NW 30 / 31 moderato50% - assenti -0% 3130m1008mb 26°>10km buona 50 3.3
18 sereno 24.5° NNW 28 / 29 moderato52% - assenti -0% 3180m1008mb 25°>10km buona 52 1.6
19 sereno 23.7° NW 26 / 27 moderato54% - assenti -0% 3220m1009mb 24°>10km buona 54 0.4
20 sereno 22.6° NW 23 / 26 moderato57% - assenti -0% 3190m1009mb 23°>10km buona 57 0
21 sereno 21° NW 21 / 24 moderato68% - assenti -0% 3160m1009mb 21°>10km buona 68 0
22 poco nuvoloso 20° NW 19 / 24 moderato76% - assenti -0% 3130m1009mb 20°>10km buona 76 0
23 nubi sparse 19.4° WNW 18 / 24 moderato80% - assenti -0% 3130m1009mb 20°>10km buona 80 0
24 nubi sparse 19.2° WNW 18 / 23 moderato81% - assenti -0% 3130m1009mb 20°>10km buona 81 0
01 poco nuvoloso 19° WNW 18 / 22 moderato82% - assenti -0% 3140m1009mb 20°>10km buona 82 0
02 poco nuvoloso 18.6° WNW 17 / 21 moderato84% - assenti -0% 3160m1009mb 19°>10km buona 84 0

答案 1 :(得分:0)

回答第二个问题:

这是我发现要导航到要搜索的“城市”页面的方式。

第1步:

将城市的起始字母传递给请求并获得JSON响应。

例如:如果要搜索“米兰”,则使用此URL http://www.meteo.it/autosuggest/m.json?

获取字母“ m”的结果

示例JSON响应为:

{
  "url": [
    {
      "ita": "meteo",
      "sea": "meteo-mare",
      "ski": "meteo-montagna",
      "eur": "meteo",
      "wor": "meteo"
    }
  ],
  "results": [
    {
      "code": "15146",
      "value": "Milano (MI)",
      "value_it": "milano",
      "value_en": "milan",
      "url": "ita"
    },
    {
      "code": "20030",
      "value": "Mantova (MN)",
      "value_it": "mantova",
      "value_en": "mantua",
      "url": "ita"
    },
  ]
}

从JSON响应中获取米兰市的代码和value_it 例如:code=15146 & value_it=milano

第二步:

使用检索到的值构造URL。 例如:http://www.meteo.it/meteo/ value_it -代码

http://www.meteo.it/meteo/milano-15146

科马基奥城市的示例:

请求网址:http://www.meteo.it/autosuggest/c.json

JSON响应:

   {
      "code": "38006",
      "value": "Comacchio (FE)",
      "value_it": "comacchio",
      "value_en": "comacchio",
      "url": "ita"
    }

使用JSON值构造URL:

http://www.meteo.it/meteo/comacchio-38006
相关问题