jar包
1.ParserUtil的编写
public class ParserUtil {
/**
* 通过确定某个标签的特定值过滤标签
*
* @param html
* 文本
* @param tagClass
* 标签的CLass
* @param Name
* 标签的元素名称
* @param Value
* 元素的值
* @return
*/
public static NodeList parseTags(String html, final Class tagClass, final String Name, final String Value) {
try {
Parser parser = new Parser(html); // 解析Html文本
return parser.parse( // 设置过滤器
new NodeFilter() { // 实现类
@Override
public boolean accept(Node node) {
if (node.getClass().getName().equals(tagClass.getName()))// 先找出对应标签
{
TagNode tag = (TagNode) node; // 将标签转化为基类TagNode
String v = tag.getAttribute(Name); // 获得对应的标签元素的值
if (v != null && !"".equals(v) && v.equals(Value)) { // 与Value进行对比
return true;
}
}
return false;
}
});
} catch (ParserException e) {
e.printStackTrace();
}
return null;
}
}
2.使用ParserUtil爬取照片并下载在指定路径
public class SpiderParserTest3 {
@Test
public void test() {
HttpClient sender = new DefaultHttpClient();
HttpGet get = new HttpGet("https://search.jd.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC%20%E8%BD%BB%E8%96%84%E6%9C%AC&enc=utf-8&suggest=1.his.0.0&wq=&pvid=f56d8ab2ebff467f8b947fc96e3e4f70");
try {
HttpResponse execute = sender.execute(get);
HttpEntity entity = execute.getEntity();
InputStream in = entity.getContent();
IOUtils.copy(in, new FileOutputStream("F:/a.html"));
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void test2()
{
try {
String html = IOUtils.toString(new FileInputStream("F:/a.html"));
NodeList Tags = ParserUtil.parseTags(html, ImageTag.class, "class", "err-product");//给定参数
for (int i = 0; i < Tags.size(); i++) {//将NodeList遍历
ImageTag img = (ImageTag)Tags.elementAt(i);//强制类型转换
String src = img.getAttribute("src");//获得src属性
if(src!=null) {
HttpClient sender = new DefaultHttpClient();
src="https:"+src;//添加前缀
System.out.println(src);
HttpGet get = new HttpGet(src);
HttpResponse response = sender.execute(get);
HttpEntity entity = response.getEntity();
InputStream in = entity.getContent();
String name = FilenameUtils.getName(src);//获得文件名
IOUtils.copy(in, new FileOutputStream("F:/LoadImage/"+name));//输出文件
sender.getConnectionManager().shutdown();//关闭HttpClient
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意
因在网页上获得的图片的Src中很多都不包含Http:或Https:所以应当先查看所下载图片的请求地址是哪一类,是否有Http头,如若没有需要手动拼接字符串进行