使用Jsoup在网站上提交搜索



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

如何解决这个问题?

这是我的代码:

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>

编辑

谢谢大家!您的回答解决了我的问题:) 但是我对另一个天气网站有问题。我如何从这个其他站点执行与以前相同的操作?

PS:这个网站的问题就是强制点击城市进行搜索,在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>

回答你的第二个问题:

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

第 1 步:

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

例如:如果要搜索"Milano",请使用此URL获取字母"m"的结果http://www.meteo.it/autosuggest/m.json?

示例 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

步骤2:

使用检索到的值构造 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 值构造网址:

http://www.meteo.it/meteo/comacchio-38006
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

最新更新