Java使用正则表达式抓取Bing首页每日图片
2017-06-27 17:40
369 查看
Java学习到了正则表达式,总想做点有用的东西,这两天想给电脑换壁纸,看到Bing每天的主页图片挺好看的,就寻思着抓下来。
第一步就是分析主页的结构了这个Bing的主页图片直接使用小箭头抓是抓不到的,在Network的Img里我们可以找到图片所在处:
把链接copy下来,在Element里面搜索我们边可以看到链接是在一个JS脚本里面的,这个时候就比较清楚我们要怎么搞了,
链接所在的那一片弄出来就是这个样子了
g_img={url: “/az/hprichbg/rb/LoxodontaAfricana_ZH-CN10434704249_1920x1080.jpg”}把这个东东里的链接搞出来加上 http://cn.bing.com 就是我们需要的图片链接了,那么这个正则表达式写出来就是
"g_img=\\{url: \"([\\w_\\-/]+?\\.jpg)\""
我开始找的时候把后面的”}”加上去发现找不到链接,只好使用这个了,在找到链接后我们就可以获取到图片的二进制内容,写入Java的文件中保存起来了。这里又学习了一点Java的文件知识,如何判断一个文件是否已经存在,新建文件,写入二进制等东西。
具体的代码就是下面了,也不是很多,就几十行
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.file.FileAlreadyExistsException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class GetBingPicture { public static void main(String[] args) throws Exception { GetBingPicture getBingPicture = new GetBingPicture(); String home = "http://cn.bing.com"; // 获取链接 String url = getBingPicture.GetUrl(home); // 保存图片 getBingPicture.SavePicture(home + url); } private String GetUrl(String home_url) throws Exception { InputStream is = new URL(home_url).openStream(); byte[] buff = new byte[1024]; StringBuilder builder = new StringBuilder(); // 得到界面的字符串 while (is.read(buff, 0, buff.length) > 0) { // 需要使用String的编码解码 builder.append(new String(buff, "UTF-8")); } is.close(); // 开始正则匹配 Matcher matcher = Pattern.compile("g_img=\\{url: \"([\\w_\\-/]+?\\.jpg)\"").matcher(builder.toString()); // 找链接 if (matcher.find()) { System.out.println("Find the url: " + matcher.group(1)); return matcher.group(1); } else { throw new Exception("Not found the url"); } } // 保存函数 private void SavePicture(String url) throws IOException { // 打开链接 InputStream is = new URL(url).openStream(); // 链接处理一下得到名字 int start = url.lastIndexOf("/") + 1; int end = url.indexOf("_"); // 拼接出名字,substring函数前闭后开 String name = url.substring(start, end) + ".jpg"; File file = new File(name); // 判断是否已经存在 if (file.exists()) { throw new FileAlreadyExistsException(name + " has existed"); } else { // 创建文件 file.createNewFi 4000 le(); FileOutputStream fileOutputStream = new FileOutputStream(file); byte[] buff = new byte[1024]; int len = 0; while ((len = is.read(buff, 0, buff.length)) > 0) { fileOutputStream.write(buff, 0, len); } System.out.println(name + " was downloaded successfully"); // 关掉才能保存到磁盘里 fileOutputStream.close(); } is.close(); } }
其实我发现由于整个页面中只有一个g_img={url: ,那么直接字符串搜索我估计也是可以的,这个方法我用python实现了一下,代码短了不少,上链接啦python字符串查找实现。
大家一起学习吧
相关文章推荐
- 详解JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- Java中使用正则表达式获取网页中所有图片的路径
- java正则表达式的使用1 通过正则表达式抓取网页中的email
- JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- 使用C#正则表达式获取必应每日图片地址
- Java 使用正则表达式取出图片地址以及跳转的链接地址,来判断死链(一)
- JAVA抓取网页的图片,JAVA利用正则表达式抓取网站图片
- Java - 抓取优酷网视频播放页面(使用jsoup解析html,正则表达式处理字符串)
- Java中使用正则表达式获取网页中所有图片的路径
- Python使用正则表达式抓取网页图片的方法示例
- 如何使用Java自带的正则表达式
- JAVA中使用正则表达式
- 判断字符串中有多少中文字符*java正则表达式使用
- Java中使用正则表达式来实现字符串匹配
- 在Java中使用正则表达式
- JAVA正则表达式判断图片格式
- Java中使用正则表达式
- java中使用正则表达式
- 在Java中使用正则表达式处理文本