做了一个抓取网页图片的小测试,在抓取特定网页,比如剑网三等主页图片可以成功,但是在抓取一些网页时候会报错
package J124Internet;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Alexryc
*
*/
public class python {
//进入服务器,下载源码
public static String htmlSource(String link,String encoding) {
StringBuilder stb =new StringBuilder();
//获取网络对象
try {
URL url =new URL(link);
//建立网络链接
URLConnection uc =url.openConnection();
//设置伪装对象,跳过防火墙
uc.setRequestProperty("User-Agent", "java");
//下载源代码
InputStream is =uc.getInputStream();
InputStreamReader isr =new InputStreamReader(is,encoding);
BufferedReader br =new BufferedReader(isr);
String line =null;
while((line =br.readLine())!=null) {
stb.append(line +"\n");
}
//关闭流
br.close();
isr.close();
is.close();
} catch (MalformedURLException e) {
// 打印堆栈信息
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return stb.toString();
}
public static void main(String[] args) {
String html =htmlSource("https://www.nanrentu.cc/mntp/","gbk");
String regex ="src=\"(.+?)\"";
Pattern ptn =Pattern.compile(regex);
//System.out.println(html);
Matcher mc =ptn.matcher(html);
while(mc.find()) {
StringBuffer s =new StringBuffer(mc.group());
//建立s3以保存图片名称,我不会用其他方法
StringBuffer s3 =new StringBuffer(mc.group());
//string与StringBuffer转换
String s1 =s.toString();
if(s1.contains("jpg")) {
s.delete(0, 7);
s.delete(s.length()-1, s.length());
s.insert(0 ,"http://", 0, 7);
System.out.println(s);
s3.delete(0, 74);
s3.delete(s3.length()-1, s3.length());
InputStream inStream = null;
//下载打印的图片
try {
String s2 =s.toString();
//新建图片位置
URL url1 = new URL(s2);
URLConnection con = url1.openConnection();
inStream = con.getInputStream();
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buf = new byte[2048];
int len = 0;
while((len = inStream.read(buf)) != -1){
outStream.write(buf,0,len);
}
inStream.close();
outStream.close();
File file = new File("F:\\a"+"/" +s3); //图片下载的位置
FileOutputStream op = new FileOutputStream(file);
op.write(outStream.toByteArray());
op.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
continue;
}
}
}
}
报错
http://tps://tu.nanrentu.cc/uploadImg/2019/0124/46c1ca434b9bc91343694f482f35097a_c_230_345.jpg
java.net.UnknownHostException: tps
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:220)
at java.base/java.net.Socket.connect(Socket.java:591)
at java.base/java.net.Socket.connect(Socket.java:540)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:182)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:341)
at java.base/sun.net.www.http.HttpClient.New(HttpClient.java:362)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1242)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1181)
at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1075)
at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:1009)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1581)
at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1509)
at J124Internet.python.main(python.java:85)
相关推荐
一个简单不报错的summernote 图片上传案例
一个比较完整的summernote上传图片的案例,没有后台(上传图片网上案例太多),只有前端js.修正了网上提供的,但是有bug的代码。 这个例子,js保证不报错。亲测可用 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html > <html> <head> [removed][removed] <link href="//netdna.bootstrap
Selenium实战:突破微博反爬,高效抓取动态数据的技术方案
网络爬虫是数据采集与分析的基础技术,其核心原理在于模拟浏览器行为或直接发送HTTP请求,从网页中提取结构化信息。在应对现代Web应用时,传统的静态页面抓取技术常因JavaScript动态渲染而失效,此时浏览器自动化工具的价值凸显。Selenium作为主流的Web自动化测试框架,通过驱动真实浏览器,能够完整执行页面加载、用户交互与JavaScript渲染,从而实现对动态内容的“所见即所得”式抓取,在数据挖掘、舆情监控等场景中具有重要技术价值。本文聚焦于利用Selenium解决微博平台的反爬挑战,详细阐述了通过
R语言网页抓取入门:rvest核心原理与实战指南
网页抓取(Web Scraping)是将HTML/XML等结构化网页内容转化为可分析数据的关键技术,其核心在于解析DOM树、精准定位节点并提取文本或属性。rvest作为R语言生态中最成熟稳定的HTML解析包,基于CSS选择器语法与函数式管道设计,大幅降低学习门槛与调试成本。它专精于静态页面解析,天然适配R的数据工作流(如dplyr清洗、ggplot2可视化),在学术文献采集、竞品价格监控、政务数据获取等场景中具备高可靠性与中文友好性。本文聚焦rvest的底层抽象逻辑、选择器实战技巧、分页处理范式及生产级容错
Python爬虫实战:逆向分析Behance动态接口高效抓取设计项目
在数据采集领域,动态网页爬虫是处理现代单页应用(SPA)的关键技术。其核心原理在于识别前端JavaScript通过API接口异步加载数据的机制,而非直接解析静态HTML。这项技术的价值在于能够高效、精准地获取结构化数据,大幅提升信息收集效率,广泛应用于市场调研、竞品分析和内容聚合等场景。通过逆向工程分析网络请求,可以定位到类似Behance这类设计社区的数据接口,从而绕过动态渲染直接获取JSON格式的项目信息。本文以**接口逆向**和**反爬策略**为核心,详细解析如何通过Python的requests库模
解决java junit单元测试@Test报错的问题
今天小编就为大家分享一篇解决java junit单元测试@Test报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


