java爬虫爬取图片如何爬取这样格式的图片链接?

  刚刚接触到“爬虫”这个词的时候是在大一,那时候什么都不明白,但知道了百度、谷歌他们的搜索引擎就是个爬虫。
现在大二。再次燃起对爬虫的热爱,查阅资料,知道常用java、python语言编程,这次我选择了java。在网上查找的
代码在本地跑大部分都不能使用,查找相关的资料教程也没有适合的。实在头疼、、、
  现在自己写了一个简单爬取网页图片的代码,先分析一下自己写的代码吧
//获得html文本内容
String HTML = cm.getHtml(URL);
//获取图片标签
List&String& imgUrl = cm.getImageUrl(HTML);
//获取图片src地址
List&String& imgSrc = cm.getImageSrc(imgUrl);
//下载图片
cm.Download(imgSrc);
  简单分为四个功能方法(函数),首先是要获取html文本
//获取HTML内容
private String getHtml(String url)throws Exception{
URL url1=new URL(url);//使用java.net.URL
URLConnection connection=url1.openConnection();//打开链接
InputStream in=connection.getInputStream();//获取输入流
InputStreamReader isr=new InputStreamReader(in);//流的包装
BufferedReader br=new BufferedReader(isr);
StringBuffer sb=new StringBuffer();
while((line=br.readLine())!=null){//整行读取
sb.append(line,0,line.length());//添加到StringBuffer中
sb.append('\n');//添加换行符
//关闭各种流,先声明的后关闭
br.close();
isr.close();
in.close();
return sb.toString();
然后在获取的html文本中寻找图片,根据html标记语言不难发现图片通常带有&img&,所以
写一个关于img的正则表达式
// 获取img标签正则
private static final String IMGURL_REG = "&img.*src=(.*?)[^&]*?&";
接着是获取img标签信息,大部分涉及的是集合接口和正则表达式的知识
//获取ImageUrl地址
private List&String& getImageUrl(String html){
Matcher matcher=pile(IMGURL_REG).matcher(html);
List&String&listimgurl=new ArrayList&String&();
while (matcher.find()){
listimgurl.add(matcher.group());
然后获取img标签信息中找取图片的地址信息,需要构造图片地址的正则表达式
// 获取src路径的正则
private static final String IMGSRC_REG = "[a-zA-z]+://[^\\s]*";
接着是获取图片地址的信息,大部分涉及的也是集合接口和正则表达式的知识
//获取ImageSrc地址
private List&String& getImageSrc(List&String& listimageurl){
List&String& listImageSrc=new ArrayList&String&();
for (String image:listimageurl){
Matcher matcher=pile(IMGSRC_REG).matcher(image);
while (matcher.find()){
listImageSrc.add(matcher.group().substring(0, matcher.group().length()-1));
return listImageS
最后通过图片地址信息下载图片
//下载图片
private void Download(List&String& listImgSrc) {
//开始时间
Date begindate = new Date();
for (String url : listImgSrc) {
//开始时间
Date begindate2 = new Date();
String imageName = url.substring(url.lastIndexOf("/") + 1, url.length());
URL uri = new URL(url);
InputStream in = uri.openStream();
FileOutputStream fo = new FileOutputStream(new File("src/res/"+imageName));//文件输出流
byte[] buf = new byte[1024];
int length = 0;
System.out.println("开始下载:" + url);
while ((length = in.read(buf, 0, buf.length)) != -1) {
fo.write(buf, 0, length);
in.close();
fo.close();
System.out.println(imageName + "下载完成");
//结束时间
Date overdate2 = new Date();
double time = overdate2.getTime() - begindate2.getTime();
System.out.println("耗时:" + time / 1000 + "s");
Date overdate = new Date();
double time = overdate.getTime() - begindate.getTime();
System.out.println("总耗时:" + time / 1000 + "s");
} catch (Exception e) {
System.out.println("下载失败");
展示一下运行结果:
上一下全部代码:
import java.io.*;
import java.net.URL;
import java.net.URLC
import java.util.*;
import java.util.regex.M
import java.util.regex.P
public class Main {
private static final String URL = "/view/1439719.html";
// 获取img标签正则
private static final String IMGURL_REG = "&img.*src=(.*?)[^&]*?&";
// 获取src路径的正则
private static final String IMGSRC_REG = "[a-zA-z]+://[^\\s]*";
public static void main(String[] args) {
Main cm=new Main();
//获得html文本内容
String HTML = cm.getHtml(URL);
//获取图片标签
List&String& imgUrl = cm.getImageUrl(HTML);
//获取图片src地址
List&String& imgSrc = cm.getImageSrc(imgUrl);
//下载图片
cm.Download(imgSrc);
}catch (Exception e){
System.out.println("发生错误");
//获取HTML内容
private String getHtml(String url)throws Exception{
URL url1=new URL(url);
URLConnection connection=url1.openConnection();
InputStream in=connection.getInputStream();
InputStreamReader isr=new InputStreamReader(in);
BufferedReader br=new BufferedReader(isr);
StringBuffer sb=new StringBuffer();
while((line=br.readLine())!=null){
sb.append(line,0,line.length());
sb.append('\n');
br.close();
isr.close();
in.close();
return sb.toString();
//获取ImageUrl地址
private List&String& getImageUrl(String html){
Matcher matcher=pile(IMGURL_REG).matcher(html);
List&String&listimgurl=new ArrayList&String&();
while (matcher.find()){
listimgurl.add(matcher.group());
//获取ImageSrc地址
private List&String& getImageSrc(List&String& listimageurl){
List&String& listImageSrc=new ArrayList&String&();
for (String image:listimageurl){
Matcher matcher=pile(IMGSRC_REG).matcher(image);
while (matcher.find()){
listImageSrc.add(matcher.group().substring(0, matcher.group().length()-1));
return listImageS
//下载图片
private void Download(List&String& listImgSrc) {
//开始时间
Date begindate = new Date();
for (String url : listImgSrc) {
//开始时间
Date begindate2 = new Date();
String imageName = url.substring(url.lastIndexOf("/") + 1, url.length());
URL uri = new URL(url);
InputStream in = uri.openStream();
FileOutputStream fo = new FileOutputStream(new File("src/res/"+imageName));
byte[] buf = new byte[1024];
int length = 0;
System.out.println("开始下载:" + url);
while ((length = in.read(buf, 0, buf.length)) != -1) {
fo.write(buf, 0, length);
in.close();
fo.close();
System.out.println(imageName + "下载完成");
//结束时间
Date overdate2 = new Date();
double time = overdate2.getTime() - begindate2.getTime();
System.out.println("耗时:" + time / 1000 + "s");
Date overdate = new Date();
double time = overdate.getTime() - begindate.getTime();
System.out.println("总耗时:" + time / 1000 + "s");
} catch (Exception e) {
System.out.println("下载失败");
  本人还是java初学者,能力有限,如有更好的代码或者教程可以留言,我们可以交流学习。以上还有不足或者不对之处请指出,非常感谢个位。
阅读(...) 评论()写了一个小爬虫,其实也算不上爬虫,只是抓取了页面的图片。这里主要是BeautifulSoup解析HTML源码,非常的方便啊,简直是神器,之前一直是使用正则表达式去解析非常痛苦啊!!!!
这里是BeautifulSoup的中文文档:/software/BeautifulSoup/bs4/doc.zh/
代码详细见注释,解释的非常清晰了。以后再慢慢加一些功能吧
最后附上我的这个小项目的github地址:/qq/spider
原文链接:
&&&&import&urllib2&&from&bs4&import&BeautifulSoup&&import&os&&import&re&&&&&&url=&/question/&&&&&&&def&download(_url,name):&&&&&&if(_url==None):&&&&&&&&&&pass&&&&&&result=urllib2.urlopen(_url)&&&&&&&&&&&&if(result.getcode()!=200):&&&&&&&&&&pass&&&&&&else:&&&&&&&&&&data=result.read()&&&&&&&&&&with&open(name,&&wb&)&as&code:&&&&&&&&&&&&&&code.write(data)&&&&&&&&&&&&&&code.close()&&&&&&res=urllib2.urlopen(url)&&respond=res.read()&&&&count=0&&soup=BeautifulSoup(respond)&&lst=[]&&&&for&link&in&soup.find_all(&img&):&&&&&&address=link.get('data-original')&&&&&&lst.append(address)&&&&s=set(lst)&&for&address&in&s:&&&&&&if(address!=None):&&&&&&&&&&pathName=&E:\\2333\\&+str(count+1)+&.jpg&&&&&&&&&&&download(address,pathName)&&&&&&&&&&count=count+1&&&&&&&&&&print&&正在下载第:&,count&&
#coding=utf-8
import urllib2
from bs4 import BeautifulSoup
url=&/question/&#指定的URL
def download(_url,name):#下载函数
if(_url==None):#地址若为None则跳过
result=urllib2.urlopen(_url)#打开链接
#print result.getcode()
if(result.getcode()!=200):#如果链接不正常,则跳过这个链接
data=result.read()#否则开始下载到本地
with open(name, &wb&) as code:
code.write(data)
code.close()
res=urllib2.urlopen(url)#打开目标地址
respond=res.read()#获取网页地址源代码
count=0#计数君
soup=BeautifulSoup(respond)#实例化一个BeautifulSoup对象
lst=[]#创建list对象
for link in soup.find_all(&img&):#获取标签为img的内容
address=link.get('data-original')#获取标签属性为data-original的内容,即图片地址
lst.append(address)#添加到list中
s=set(lst)#去重
for address in s:
if(address!=None):
pathName=&E:\\2333\\&+str(count+1)+&.jpg&#设置路径和文件名
download(address,pathName)#下载
count=count+1#计数君+1
print &正在下载第:&,count
本文已收录于以下专栏:
相关文章推荐
原文链接:http://blog.csdn.net/tigerisland45/article/details/
Virtual Judge
ACM-ICPC Live A...
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib,urllib2;
#通过url获取网页
def getHtml(...
网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。
最近在写一个网络爬虫的代码,提供命令行来下载文件或者是打印根域名下指定节点及深度的子节点。用的是urllib2库,算是比较简单,但是功能并没有很强大。
说重点吧,在实际爬网页的过程中,一般的过程是一次...
一开始把图片爬下来的时候完全都不能看,查了很多也没清楚原因,最近看到一篇解决这个问题的博客,膜拜呀。
原博客地址:/eastmount/p/5055908....
之前稍微看了用Python爬虫爬取贴吧图片的文章,发现用Python爬虫确实方便。一个非常有用的东西便是自动下载网上的PDF文档。下面就来举两个例子,程序主要参考自这篇文章:http://ddswhu...
最近爬虫又解决了很多问题,算是保存这部分的吧。
首先,我们如果想要抓取本地txt文件中的内容拿到特定网址去搜索。然后爬取搜索结果的话,这个很简单:
f=open('C://Python27//1....
最近老师让学习Python与维基百科相关的知识,无聊之中用Python简单做了个爬取“游讯网图库”中的图片,因为每次点击下一张感觉非常浪费时间又繁琐。主要分享的是如何爬取HTML的知识和Python如...
最近开始学习python,python的爬虫诱惑力实在太强。今天看着网上的教程,也学会了这样一个小功能
主要步骤是:
1.抓取网页
2.获取图片地址
3.抓取图片内容并保存到本地
下面是关键代...
python爬虫实战——图片自动下载器之前介绍了那么多基本知识【Python爬虫】入门知识,大家也估计手痒了。想要实际做个小东西来看看,毕竟:
talk is cheap show me the ...
他的最新文章
讲师:董西成
讲师:唐宇迪
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【图文详解】python爬虫实战——5分钟做个图片自动下载器
我的图书馆
【图文详解】python爬虫实战——5分钟做个图片自动下载器
我想要(下)的,我现在就要python爬虫实战——图片自动下载器之前介绍了那么多基本知识(没看的赶紧去看)大家也估计手痒了。想要实际做个小东西来看看,毕竟:talk is cheap show me the code!这个小工程的代码都在github上,感兴趣的自己去下载:制作爬虫的基本步骤顺便通过这个小例子,可以掌握一些有关制作爬虫的基本的步骤。一般来说,制作一个爬虫需要分以下几个步骤:分析需求(对,需求分析非常重要,不要告诉我你老师没教你)分析网页源代码,配合F12(没有F12那么乱的网页源代码,你想看死我?)编写正则表达式或者XPath表达式(就是前面说的那个神器)正式编写python爬虫代码效果运行:恩,让我输入关键词,让我想想,输入什么好呢?好像有点暴露爱好了。回车好像开始下载了!好赞!,我看看下载的图片,哇瞬间我感觉我又补充了好多表情包....好了,差不多就是这么个东西。需求分析'我想要图片,我又不想上网搜“'最好还能自动下载'……这就是需求,好了,我们开始分析需求,至少要实现两个功能,一是搜索图片,二是自动下载。首先,搜索图片,最容易想到的就是爬百度图片的结果,好,那我们就上百度图片看看基本就是这样,还挺漂亮的。我们试着搜一个东西,我打一个暴字,出来一系列搜索结果,这说明什么....随便找一个回车好了,我们已经看到了很多图片了,如果我们能把这里面的图片都爬下来就好了。我们看见网址里有关键词信息我们试着在网址直接换下关键词,跳转了有没有!这样,可以通过这个网址查找特定的关键词的图片,所以理论上,我们可以不用打开网页就能搜索特定的图片了。下个问题就是如何实现自动下载,其实利用之前的知识,我们知道可以用request,获取图片的网址,然后把它爬下来,保存成.jpg就行了。所以这个项目就应该可以完成了。分析网页好了,我们开始做下一步,分析网页源代码。这里 我先切换回传统页面,为什么这样做,因为目前百度图片采用的是瀑布流模式,动态加载图片,处理起来很麻烦,传统的翻页界面就好很多了。这里还一个技巧,就是:能爬手机版就不要爬电脑版,因为手机版的代码很清晰,很容易获取需要的内容。好了,切换回传统版本了,还是有页码的看的舒服。我们点击右键,查看源代码这都是什么鬼,怎么可能看清!!这个时候,就要用F12了,开发者工具!我们回到上一页面,按F12,出来下面这个工具栏,我们需要用的就是左上角那个东西,一个是鼠标跟随,一个是切换手机版本,都对我们很有用。我们这里用第一个然后选择你想看源代码的地方,就可以发现,下面的代码区自动定位到了这个位置,是不是很NB!我们复制这个地址然后到刚才的乱七八糟的源代码里搜索一下,发现它的位置了!(小样!我还找不到你!)但是这里我们又疑惑了,这个图片怎么有这么多地址,到底用哪个呢?我们可以看到有thumbURL,middleURL,hoverURL,objURL通过分析可以知道,前面两个是缩小的版本,hover是鼠标移动过后显示的版本,objURL应该是我们需要的,不信可以打开这几个网址看看,发现obj那个最大最清晰。好了,找到了图片位置,我们就开始分析它的代码。我看看是不是所有的objURL全是图片貌似都是以.jpg格式结尾的,那应该跑不了了,我们可以看到搜索出61条,说明应该有61个图片编写正则表达式通过前面的学习,写出如下的一条正则表达式不难把?pic_url = re.findall(''objURL':'(.*?)',',html,re.S)编写爬虫代码好了,正式开始编写爬虫代码了。这里我们就用了2个包,一个是正则,一个是requests包,之前也介绍过了,没看的回去看!#-*- coding:utf-8 -*-import reimport requests然后我们把刚才的网址粘过来,传入requests,然后把正则表达式写好url = '/search/flip?tn=baiduimage&ipn=r&ct=&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=0_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'html = requests.get(url).textpic_url = re.findall(''objURL':'(.*?)',',html,re.S)理论有很多图片,所以要循环,我们打印出结果来看看,然后用request获取网址,这里由于有些图片可能存在网址打不开的情况,加个5秒超时控制。pic_url = re.findall(''objURL':'(.*?)',',html,re.S)i = 0for each in pic_url: print each try: pic= requests.get(each, timeout=10) except requests.exceptions.ConnectionError: print '【错误】当前图片无法下载' continue好了,再就是把网址保存下来,我们在事先在当前目录建立一个picture目录,把图片都放进去,命名的时候,用数字命名把 string = 'pictures\\'+str(i) + '.jpg' fp = open(string,'wb') fp.write(pic.content) fp.close() i += 1整个代码就是这样:#-*- coding:utf-8 -*-import reimport requestsurl = '/search/flip?tn=baiduimage&ipn=r&ct=&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=0_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&word=%E5%B0%8F%E9%BB%84%E4%BA%BA'html = requests.get(url).textpic_url = re.findall(''objURL':'(.*?)',',html,re.S)i = 0for each in pic_url: print each try: pic= requests.get(each, timeout=10) except requests.exceptions.ConnectionError: print '【错误】当前图片无法下载' continue string = 'pictures\\'+str(i) + '.jpg' fp = open(string,'wb') fp.write(pic.content) fp.close() i += 1我们运行一下,看效果(什么你说这是什么IDE感觉很炫!?赶紧去装Pycharm,看这个文章!)!好了我们下载了58个图片,咦刚才不是应该是61个吗?我们看,运行中出现了有一些图片下载不了我们还看到有图片没显示出来,打开网址看,发现确实没了。所以,百度有些图片它缓存到了自己的机器上,所以你还能看见,但是实际连接已经失效好了,现在自动下载问题解决了,那根据关键词搜索图片呢?只要改url就行了,我这里把代码写下来了 word = raw_input('Input key word: ') url = '/search/flip?tn=baiduimage&ie=utf-8&word='+word+'&ct=&v=flip' result = requests.get(url)好了,享受你第一个图片下载爬虫吧!!当然不只能下载百度的图片拉,依葫芦画瓢,你现在应该做很多事情了,比如爬取头像,爬淘宝展示图,或是...美女图片,捂脸。一切都凭客官你的想象了,当然,作为爬虫的第一个实例,虽然纯用request已经能解决很多问题了,但是效率还是不够高,如果想要高效爬取大量数据,还是用scrapy吧,我下面会讲有关scrapy的一个实例:这个小工程的代码都在github上,感兴趣的自己去下载:
著作权归作者所有
TA的推荐TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&[转]&[转]&[转]&
喜欢该文的人也喜欢加QQ群下载完整Eclipse项目
WebCollector网络爬虫:(已满)
WebCollector网络爬虫2群:
欢迎加入QQ群讨论机器学习和网络爬虫问题
加QQ群下载完整Eclipse项目
WebCollector网络爬虫:(已满)
WebCollector网络爬虫2群:
Subscribe!}

我要回帖

更多关于 python爬虫爬取视频 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信