Java 利用爬虫爬取一些代理IP
在使用爬虫进行一些数据爬取的时候,难免会碰上IP被封的情况,因此提前做个准备,写了一个简单的程序先爬取一些代理IP。
public void downIP() throws IOException { // 需要爬取IP信息的网站地址 String url = "http://www.66ip.cn/areaindex_1/1.html"; // 动态模拟请求数据 CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); // 模拟浏览器浏览(user-agent的值可以通过浏览器浏览,查看发出请求的头文件获取) httpGet.setHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"); CloseableHttpResponse response = httpclient.execute(httpGet); // 获取响应状态码 int statusCode = response.getStatusLine().getStatusCode(); try { HttpEntity entity = response.getEntity(); // 如果状态响应码为200,则获取html实体内容或者json文件 if (statusCode == 200) { // 转一下码 String html = EntityUtils.toString(entity, "gb2312"); // 提取HTML Document doc = Jsoup.parse(html); // 下面是根据页面html代码来编写的,根据观察,发现这个网页上的数据都在table表格里,因此根据table标签获取数据 Elements ulList = doc.select("table"); // 观察后发现,页面里存在三个table表格,而我们只需要第三个表格里的数据// 获取第三个表格中tr标签里的数据 Elements liList = ulList.get(2).select("tr"); for (Element item : liList) { //这里直接打印出这些数据,需要的可以存进数据库 System.out.println(item.text()); } // 消耗掉实体 EntityUtils.consume(response.getEntity()); } else { // 消耗掉实体 EntityUtils.consume(response.getEntity()); } } finally { response.close(); } }
直接在主函数里运行这个方法就🆗了。
使用这段代码需要用到几个jar包:
之后就可以设置代理IP了
System.getProperties().setProperty("proxySet", "true"); System.getProperties().setProperty("http.proxyHost", "61.135.155.82"); // 设置ip System.getProperties().setProperty("http.proxyPort", "443");// 设置端口号