Jsoup乱码处理
jsoup在爬取网页的时候,如果不设置编码格式,可能会造成遇到生僻字的时候乱码
解决方法:
在爬取的时候加入网页对应的编码格式;
Document document = Jsoup.parse(setHeader(address).getInputStream(), "GBK", address);
---
public static HttpURLConnection setHeader(String urlStr) {
URL url = null;
HttpURLConnection connection = null;
try {
url = new URL(urlStr);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setUseCaches(Boolean.FALSE);
connection.addRequestProperty("Connection", "close");
connection.addRequestProperty("Referrer Policy","no-referrer-when-downgrade");
//设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(8000);
//设置从主机读取数据超时
connection.setReadTimeout(8000);
//设置cookie
} catch (Exception e) {
new RuntimeException(e);
}
return connection;
}
jsoup只拿table中的数据不拿table的表头
在爬table元素的时候总是会遇到这样的情况,只想要从第二行开始的数据,而不要第一行的数据。
那么可以使用jsoup的伪选择器 :gt(n) 查找哪些元素的同级索引值大于n,比如: div p:gt(2)表示div的第三个p元素的内容
Elements elements = document.select("#pills-stable_https > table > tbody > tr:gt(0)");
<tr>
<td>免费ip</td>
<td>端口</td>
<td>匿名度</td>
<td>类型</td>
<td>位置</td>
<td>响应速度(ms)</td>
</tr>
<tr>
<td>203.42.227.113:8080</td>
<td>8080</td>
<td>高匿</td>
<td>HTTPS</td>
<td>中国 湖南 永州 电信</td>
<td>2.1</td>
</tr>
<tr>
<td>130.193.112.146:36923</td>
<td>36923</td>
<td>高匿</td>
<td>HTTPS</td>
<td>中国 新疆 哈密 联通</td>
<td>3.28</td>
</tr>