精华内容
下载资源
问答
  • 前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论)。话多说进入正题。1....

    前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论)。话不多说进入正题。

    1.分析页面

    我之前去网上搜了一圈爬微博的爬虫大都是采用模拟登陆的方式爬取,我这里并没有采用那种方式,直接是通过模拟请求得到数据的。如下(爬取的微博:https://m.weibo.cn/profile/1792328230)

    这个页面是该博主的个人简介页面,直接拉到底,会有一个查看所有微博,点击它会跳转到该博主的所有微博页面

    9e32febcb40708986f7a2b6a527e7111.png

    d3995a6926f9dcc53ea6a9a26199f24b.png

    这里打开开发者工具查看网络请求,找到这个数据接口https://m.weibo.cn/api/container/getIndex?containerid=2304131792328230_-_WEIBO_SECOND_PROFILE_WEIBO,你会发现本页面所有内容都在该请求返回的json数据包中。

    接着往下滑页面继续观察该请求窗口,就会发现这个接口的参数的规律。发现规律后就是老一套的模拟ajax加载获取多页数据,然后爬取目标内容。该数据接口参数如下:

    (json数据可自行观察规律,很容易找到要爬的数据所在)

    2.开始写代码

    创建一个WbGrawler类,并在构造方法初始化固定参数,如下:

    classWbGrawler():def __init__(self):"""参数的初始化

    :return:"""self.baseurl= "https://m.weibo.cn/api/container/getIndex?containerid=2304131792328230&"self.headers={"Host": "m.weibo.cn","Referer": "https://m.weibo.cn/p/2304131792328230","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36","X-Requested-with": "XMLHttpRequest"}#图片保存路径

    self.path = "D:/weibosrc/"

    然后去写一个获取单个页面json数据的方法,因为变化的参数只有page,所以这里传入一个page即可,如下:

    defgetPageJson(self,page):"""获取单个页面的json数据

    :param page:传入的page参数

    :return:返回页面响应的json数据"""url= self.baseurl + "page=%d"%pagetry:

    response=requests.get(url,self.headers)if response.status_code==200:returnresponse.json()exceptrequests.ConnectionError as e:print("error",e.args)

    拿到json数据后就要开始解析它并得到目标数据,所以这里写一个解析json数据的方法,传入一个json参数,如下:

    defparserJson(self, json):"""解析json数据得到目标数据

    :param json: 传入的json数据

    :return: 返回目标数据"""items= json.get("data").get("cards")for item initems:

    pics= item.get("mblog").get("pics")

    picList=[]#有些微博没有配图,所以需要加一个判断,方便后面遍历不会出错

    if pics is notNone:for pic inpics:

    pic_dict={}

    pic_dict["pid"] = pic.get("pid")

    pic_dict["url"] = pic.get("large").get("url")

    picList.append(pic_dict)yield picList

    这里返回的是一个个列表,列表里面的元素是存储图片信息的字典,得到图片信息后就可以开始下载了(最令人兴奋的下载环节),如下:

    defimgDownload(self,results):"""下载图片

    :param results:

    :return:"""

    for result inresults:for img_dict inresult:

    img_name= img_dict.get("pid") + ".jpg"

    try:

    img_data= requests.get(img_dict.get("url")).content

    with open(self.path+img_name,"wb") as file:

    file.write(img_data)

    file.close()print(img_name+"\tdownload successed!")exceptException as e:print(img_name+"\tdownload failed!",e.args)

    0a55ea656445e215146cb117341f995e.png

    0067ef8977adca6393734e866b08da9b.png

    3.程序的优化

    一开始试着爬了一页爬了好久(可能是电脑性能或者网络的问题),所以想着能不能开启多线程爬取,但是用户输入的页数是未知的,开启多少个子线程貌似很难取舍,这里我想到了在java里学的一个知识点--线程池,对利用线程池的特点就能完全规避掉这个尴尬。python线程池可参考这篇博客:https://www.cnblogs.com/xiaozi/p/6182990.html

    defstartCrawler(self,page):

    page_json=self.getPageJson(page)

    results=self.parserJson(page_json)

    self.imgDownload(results)

    if __name__ == '__main__':

    wg=WbGrawler()

    pool= threadpool.ThreadPool(10)

    reqs= threadpool.makeRequests(wg.startCrawler,range(1,5))

    [pool.putRequest(req)for req inreqs]

    pool.wait()

    4.写在最后

    展开全文
  • 微博的时候,有的时候那些图片加载要很长时间,有的却直接可以看到无需慢慢等待,尤其是那些你已经刷过的内容,即使你处于断网的状态下也能看到,往往这种客户体验相对而言比较好,但是有的时候我们清理了手机的...

          朋友你是否有过这样的经历,当你刷空间,刷微博的时候,有的时候那些图片加载要很长时间,有的却直接可以看到无需慢慢等待,尤其是那些你已经刷过的内容,即使你处于断网的状态下也能看到,往往这种客户体验相对而言比较好,但是有的时候我们清理了手机的一些垃圾后,就不一样了,我们还得从新刷出来,下面我就要说说这个原理了。

          这所有的实现都是通过异步加载产生的,原理就是在我们运行软件时,我们需要将一些图片显示出来,那这些图片要从哪里获取呢,我们可以通过以下的方式获取,先看一张流程图:



     

           首先我们先从map缓存中获取图片,map就是我们先前已经下载好的图片的集合,如果没有,我们查找图片文件,看是否有相应的文件,如果没有我们就开辟一个线程下载图片,等图片下载完成后,我们就将图片的url和图片放到map集合中。下一次再次刷新时,我们就直接从文件中读取已经存在的图片。到这里你应该知道如何更省流量得刷空间了吧,但是我们要实现这种功能额。下面我讲解一下核心代码:

           首先我们创建这样一个类LazyImageLoader,类里面有下面的方法

    public Bitmap get(String url,ImageLoaderCallback callback)
    	{
    		
    		Bitmap bitmap = null;
    		//先看map集合众是否有这个url的图片
    		if(imgManger.contains(url))
    		{	
    			//直接获取
    			bitmap = imgManger.getFromCache(url);
    			return bitmap;
    		}
    		
    		else
    		{
    			callbackManager.put(url, callback);
    			//开启线程下载
    			startDownLoadTread(url);
    		}
    		//先返回一个默认的图片
    		return getDefaultImag(R.drawable.user_head);
    	}
    

     

          首先我们先从map中查看是否有这个url的图片,如果有直接返回,如果没有开启线程下载,同时先返回一个固定的默认图片接下来我们就要看一下ImgManger中关于图片文件获取的主要方法了:

          首先我们新建一个map如下Map<String, SoftReference<Bitmap>>imgCache;至于SoftReference是什么,我就不说了,在这里主要是提高运行速度。

          首先我们先从上面定义的map中查找,代码如下:

    public Bitmap getFromMapCache(String url)
    	{
    		Bitmap bitmap = null;
    		
    		SoftReference<Bitmap> ref = null;
    		
    		synchronized (this)
    		{
    			ref = imgCache.get(url);
    		}
    		if(null != ref)
    		{
    			bitmap = ref.get();
    			
    		}
    		return bitmap;
    	}

     这里我们要注意防止线程同步的出现加关键词synchronized;

           如果没有,我们再从查找文件,看是否存在,这里我遇到了一个问题,同时我也明白了一件经常看到的事,显然我们要下载的图片的url是如http://www.xxx/xxx.png这样的格式,那我们将下载的文件命名保存呢?如果我们直接以url保存,那最后是读取和保存的,如果我们重命名,那么首先我们要怎样才能确定保存的是独一无二的呢,其次读取时又要按先前对文件命名的规则对URL解析然后再获取图片,这样一来将会影响读取的速度,那解决办法是有的,通过使用加密算法对url直接加密生成一个独一无二的摘要即可,在这里我直接通过Md5进行加密,到这里你应该明白有时候我们看到的文件的名字是23d4c0e84e1e642088d184807e56e324,115d7b4284479089001c7962b2b906b1之类的吧。下面我们继续写代码:

    public Bitmap getFromFile(String url)
    	{
    		
    		String fileName = this.getMd5(url);
    		
    		FileInputStream is=null;
    		
    		try
    		{
    			is=context.openFileInput(fileName);
    			
    			return BitmapFactory.decodeStream(is);
    		} 
    		catch (FileNotFoundException e)
    		{
    			e.printStackTrace();
    			return null;
    		}
    		finally
    		{
    			if(null != is)
    			{
    				try{is.close();}catch(Exception ex){};
    			}
    		}

        上面是直接从文件中查找图片,如果此时还没有,那么我们只有开启线程,通过线程来下载我们所需的图片,再将图片写到文件在写文件的时候文件名是也需要通过md5加密的。线程中主要的代码如下:

    public Bitmap downloadImg(String urlStr) throws HttpException
    	{
    		
    		try
    		{
    			URL url = new URL(urlStr);
    			HttpURLConnection connection =(HttpURLConnection) url.openConnection();
    			
    			String fileName=writerToFile(urlStr,connection.getInputStream());
    			
    			return BitmapFactory.decodeFile(fileName);
    			
    		} 
    		catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    		
    		return null;
    	}

     上面是通过http从网络中获取数据,其中的writerToFile方法如下:

    public String  writerToFile(String fileName, InputStream is)
    	{
    		
    		BufferedInputStream bis = null;
    		
    		BufferedOutputStream bos = null;
    		
    		try
    		{
    			bis = new BufferedInputStream(is);
    			bos = new BufferedOutputStream(context.openFileOutput(MD5Utils.md5(fileName), Context.MODE_PRIVATE));
    			
    			byte[] buffer = new byte[1024];
    			int length;
    			
    			while((length = bis.read(buffer)) != -1)
    			{
    				bos.write(buffer, 0, length);
    			}
    			
    		} catch (Exception e)
    		{
    			
    		}
    		finally
    		{
    			
    			try
    			{
    				if(null != bis)
    				{
    					bis.close();
    				}
    				
    				if(null != bos)
    					{
    						bos.flush();
    						bos.close();
    					
    					}
    				
    			}
    			catch (IOException e)
    			{
    				e.printStackTrace();
    			}
    		}
    		
    		
    		return context.getFilesDir() + "/" + MD5Utils.md5(fileName);
    		
    	}

     主要是快速读写文件的操作,挺简单的,不懂直接百度,最后当我们的文件写好了,再通过回调的方法
    将图片显示出来就行了。下面是我写的小项目的测试,效果还是挺好的,


    异步加载的源码我放在下面,稍微改一下
    可以直接用,直接调用类SimpleImageLoader 中的showImg(ImageView view,String url);方法即可。
     

    展开全文
  • 当我们浏览微博时,会发现微博网页下面都有下拉下载更多的选项,初始的页面只有几个微博的内容,当我们到最后再向下滑动时此时会出现一个加载的标志,然后会出现新的微博内容,根据Ajax网页的特性可发现这是一个用...

    如何用python爬取微博的数据

    这又是我正在学习崔庆才大佬的爬虫文章学习和体会到的啦,,,
    

    正文

    当我们浏览微博时,会发现微博网页下面都有下拉下载更多的选项,初始的页面只有几个微博的内容,当我们到最后再向下滑动时此时会出现一个加载的标志,然后会出现新的微博内容,根据Ajax网页的特性可发现这是一个用Ajax方式渲染的网页。整个页面并没有刷新,所以可以明白这是页面在原有的基础上发送Ajax请求数据更新网页的过程。所以我们可以得到一点爬取的思路啦

    1. 知道请求是发向哪里的
    2. 请求包含哪些参数
    3. 请求是怎么发送的
      知道了这些,我们就可以得到包含我们数据的网页啦。然后再解析这些网页数据那一部分是我们想要的,然后直接用.json的解析和正则解析来提取我们想要的数据,话不多直接开整。

    这里以作者崔庆才的微博为例(对不住了,我没有微博)首先进入作者的微博首页,进入XHR选项卡过滤请求,并且选中一个看起来像是加载数据的请求点击去看看。在这里插入图片描述
    然后看一下这个请求的url:https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1005052830678474 根据一点点的英语水平可以发现这就是数据请求的url啊,然后继续下话加载更多的数据,再用一个刚刚刷新出来的请求url比较一下Request URL: https://m.weibo.cn/api/container/getIndex?type=uid&value=2830678474&containerid=1076032830678474&page=2 经过简单的对比可以发现,这个网址请求就是向下加载请求数据的地址,然后发现里面请求的参数有四个 type, value, containerid, page,然后变化的就只有page再根据小学英语分析可得这是一个控制分页的参数,也就是说,我们只要改变这个参数就可以得到新的数据啦。
    然后我们分析一下这个请求的响应内容以便得到我们想要的数据,点进去浏览器的 preview 选项,由于Ajax请求到的是json格式的,我们的浏览器为我们做了解析,其中点开data选项,有两个分节点 cardlistinfo饱含着一些当前card内容的标识信息,和一些微博用户的总体信息,然后重要的是 card 里面包含着很多的信息,这里面就有我们要的信息,他是一个列表,包含着十个元素,点开一个观察可以发现里面就是微博的内容,其中比较重要的字段是 mblog 字段,我们要的信息都在这里面。在这里插入图片描述
    所以经过上面的分析可得我们只要做一个简单的循环改变requet的 page 的值就可以得到所有的微博数据啦。下面附上代码

    
    from pyquery import PyQuery as pq
    from urllib.parse import urlencode
    import requests
    import json
    
    base_url = 'https://m.weibo.cn/api/container/getIndex?'
    
    headers = {
        'Host': 'm.weibo.cn',
        'Referer': 'https://m.weibo.cn/u/2830678474',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
        'X-Requested-With': 'XMLHttpRequest',
    }
    
    
    def get_page(page):
        params = {
            'type': 'uid',
            'value': '2830678474',
            'containerid': '1076032830678474',
            'page': page
        }
        url = base_url + urlencode(params)
        try:
            response = requests.get(url, headers=headers)
            if response.status_code == 200:
                return response.json()
        except requests.ConnectionError as e:
            print('error', e.args)
    
    
    def parse_page(json):
        if json:
            items = json.get('data').get('cards')
            for index, item in enumerate(items):    ###########为什么要加上 index??????????? index是索引,items是一个字典,取出来的时候要用索引一起
                    item = item.get('mblog', {})
                    weibo = {}
                    weibo['id'] = item.get('id')
                    weibo['text'] = pq(item.get('text')).text()
                    weibo['attitudes'] = item.get('attitudes_count')
                    weibo['comments'] = item.get('comments_count')
                    weibo['reposts'] = item.get('reposts_count')
                    yield weibo
    
    
    if __name__ == '__main__':
        for page in range(1, 10):
            json = get_page(page)
            results = parse_page(json)
            for result in results:
                print(result)
    

    这里没有包括下载图片的板块,需要的可以在评论下告诉我。

    展开全文
  • Ajax动态网页加载爬取新浪微博某关键词下的信息

    千次阅读 多人点赞 2020-10-11 13:58:54
    Ajax动态网页加载爬取新浪微博某关键词下的信息 前言 有些时候我们使用浏览器查看页面正常显示的数据与使用requests抓取页面html得到的数据一致,这是因为requests获取的是原始的HTML文档,而浏览器中的页面是经过...

    Ajax动态网页加载爬取新浪微博某关键词下的信息

    前言

    有些时候我们使用浏览器查看页面正常显示的数据与使用requests抓取页面html得到的数据不一致,这是因为requests获取的是原始的HTML文档,而浏览器中的页面是经过JavaScript处理数据后的结果。这些处理过的数据可能是通过Ajax加载的,可能包含HTML文档中,可能经过特定算法计算后生成的。

    一、Ajax原理

    1、什么是Ajax?
    Ajax全称为Asynchronous JavaScript and XML,即为异步的JavaScript(JS语言)和XML(万能的数据传输格式)。
    2、异步化?
    Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器。像—些数据验证和数据处理等都交给Ajax引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求它能够利用,JavaScript在保证不被刷新,连接不变的情况下,服务器交换数据并更新部分网页的技术。像传统的网页(不使用Ajax)若要更新网页内容,必须重新加载网页,比如猫眼、豆瓣等。下图为对比图:
    在这里插入图片描述

    在这里插入图片描述

    3、示例
    浏览网页的时候,我们发现很多网页都有下滑查看更多的选项。比如,就拿新浪微博主页来说。一直往下滑,看到几个微博之后就没有了,而是会出现一个加载的动画,很快就出现了新的微博内容,这个过程就是Ajax加载的过程

    二、准备环境+爬取网站

    ananconda3——spyder
    谷歌浏览器
    https://m.weibo.cn/

    三、网页分析与定位

    1、本次爬取选取“夺冠”这一关键词

    在这里插入图片描述2、检查元素——Network——XHR——Ctrl+R

    在这里插入图片描述3、滑动页面,依次查看前三页page,Request URL中包含多个参数
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述选了前三页观察,发现在Request URL里面除了最后page=2,page=3,其他参数都不发生变化
    4、观察Preview里面的信息
    想要获取的信息都在data——cards——mblog下面

    在这里插入图片描述在这里插入图片描述
    分别查询三个页面发现,只有在第一页中时,有些cards下面不存在mblog,也就是说爬出来的内容可能会为空,所以本次爬取我舍去第一页内容不全的,从page=2开始,这样可以保证爬出来的内容比较全。

    三、代码实现

    1、导入库

    from urllib.parse import urlencode
    import requests
    import json
    

    使用urlencode主要用于正常识别输入的汉字、空格以及其他特殊字符,由于url中传入了部分参数,所以需识别参数拼接为完整的url
    输出格式为对象格式:{“key1”:obj,“key2”:obj,“key3”:obj…},所以导入json包
    2、解析页面
    定义一个获取页面的函数,其中的参数params包含如下所示

    在这里插入图片描述
    除了page以外,其他参数均不变。定义一个base_url,所有网页的base_url为同一个。

    base_url='https://m.weibo.cn/api/container/getIndex?'
    

    在这里插入图片描述这里需要用到urlencode对参数进行转化拼接,使其转化并生成出每一页完整的url

    def get_page(page):
        params = {
            'containerid':'231522type=1&t=10&q=#夺冠#',
            'page_type':'searchall',
            'isnewpage':'1',
            'luicode':'10000011',
            'lfid':'100103type=38&q=夺冠&t=0',
            'page_type': 'searchall',
            'page':page
        }
        url = base_url + urlencode(params)
        try:
            rq = requests.get(url,headers = headers)
            if rq.status_code == 200 :
                return rq.json()
        except rq.ConnectionError as e:
            print('程序错误',e.args)
    

    3、定位id和raw_text
    第一个函数返回rq.json(),目的是获取如下界面的全部解析码
    在这里插入图片描述print(re.json())后,输出全部内容
    在这里插入图片描述
    j = get_page(page)返回那个解析页面,从解析页面里面找data——cards,items为cards下面所有的东西,我只想获得mblog下的id和raw_text,所以用了一个循环。先找到mblog用item接收,再再item下找到id用id接收,再找raw_text用raw_text接收,用append进行列表的依次添加,得到 all_id和all_raw_text。最后转化为字典形式

    def parse_page(j):
            items = j['data']['cards']
            all_id=[]
            all_raw_text=[]
            for item in items:
                item = item['mblog']
                id=item['id']
                raw_text=item['raw_text']
                all_id.append(id)
                all_raw_text.append(raw_text)
            weibo = dict(zip(all_id,all_raw_text))      #zip,将两个列表合并成一个字典
            return weibo
    

    4、存入txt文件
    存入为json格式

    def write_text(result):
        with open('关键词信息.txt','a',encoding='utf-8') as f:
                f.write(json.dumps(result, ensure_ascii=False) + '\n')
                f.write('\n')
        f.close()
    

    5、主函数调用
    Referer,User-Agent,X-Reuestes-With均在网页里

    在这里插入图片描述

    if __name__ == '__main__':
        base_url = 'https://m.weibo.cn/api/container/getIndex?'
        headers = {"Referer": 'https://m.weibo.cn/search?containerid=100103type%3D1%26q%3D%E5%A4%BA%E5%86%A0',
                   "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
                   "X-Requested-With":'XMLHttpRequest'}
        for page in range(2,50):
            j = get_page(page)
            result = parse_page(j)
            print(result)
            write_text(result)
    
    

    四、结果展示

    每个id对应一条微博信息
    在这里插入图片描述

    展开全文
  • 由效果图,下半部分是简单的效果叠加,上半部分是新浪微博加载图片显示进度的效果,显示进度的半透明区域只与根据背景图的非透明区域叠加,背景图的透明区域仍为透明。 为实现此要求,联想到APIDemos中的...
  • 一、概述对于加载图片,大家都...其实对于图片加载还有种情况,就是单个图片非常巨大,并且还允许压缩。比如显示:世界地图、清明上河图、微博长图等。那么对于这种需求,该如何做呢?首先压缩,按照原图尺寸加...
  • (本文示例脚本于2010-05-28更新)如果说09年是SNS年,那10年肯定微博年,各大...我点击新浪微博缩略图的时候会快速的置换一张大图,并且鼠标会显示放大或者缩小的指针,新浪前端工程师吧视口的大图片都预加载了,所...
  • Android 高清加载巨图方案 拒绝压缩图片

    万次阅读 多人点赞 2015-10-21 10:33:52
    Android 高清加载巨图方案 拒绝压缩图片 转载请标明出处: ... 本文出自:【张鸿洋的博客】 一、概述距离上一篇博客有段时间没更新了,主要是...对于加载图片,大家都陌生,一般为了尽可能避免OOM都会按照如下做法
  • 类似QQ空间,微信朋友圈,微博主页等,展示图片的九宫格控件,自动根据图片的数量确定图片大小和控件大小,使用Adapter模式设置图片,对外提供接口回调,使用接口加载图片,支持任意的图片加载框架,如 Glide,...
  • 网页图片延迟加载

    2014-08-05 17:47:09
    看到很多大型的网站,都实现了图片延迟加载,即在浏览器的可视范围内才加载图片。这样最大的一个好处就是节约带宽提高用户体验,特别是对于访问量高的大型网站就显得尤为重要,往往大部分网站的流量都是图片大于文本...
  • 图片分屏加载插件

    千次阅读 2013-05-24 11:31:35
     百度搜索“图片分屏加载”,映入眼帘的就是jquery.lazyload,相信很多人用过,或许现在还在用,今天我就来说说这个插件的严重BUG。  何为图片分屏加载?...好处就是当页面上图片过多时候,需要
  • RecyclerView使用 及 滑动时加载图片优化方案

    万次阅读 多人点赞 2015-09-21 17:18:52
    本篇博文主要给大家分享关于RecyclerView控件的使用及通过继承RecyclerView来实现滑动时加载图片的优化方案,也同样能解决防止图片乱序的问题,之前有在网上有看到大神对Android中ListView异步加载图片乱序问题进行...
  • jquery 怎么实现图片加载显示,类似微博那种大图,当再可视区域内大图就加载但显示,只有点击小图了,大图才显示
  • 微博阅读器demo(二) 微博列表
  • nodejs 之微博爬虫

    2020-09-06 21:48:59
    本篇带大家爬取微博上漂亮小姐姐的图片和视频。 目前还规划了如下系列: 走出国门,爬取 instagram 上面的小姐姐 视频进阶,爬取 m3u8 片段并合成 超火 App 抖音短视频爬取 文章目录前言一、分析网页微博1. 分析...
  • 一、关于滚动显屏加载常常会有这样子的页面,内容很丰富,页面很长,...目前很流行的做法就是滚动动态加载,显示屏幕之外的图片默认是不加载的,随着页面的滚动,这个要显示图片的区域进入了浏览器可是窗口范围,则...
  • Glide实现图片加载,提前缓存

    千次阅读 2020-02-10 21:52:15
    当下很多App都有开屏广告,App打开的同时广告图片立马就显示出来了,可能有些人就有疑问了”这些广告...针对上面的疑问,答案只有一个,那就是“预加载”,提前将广告资源缓存到本地,在需要的时候直接从本地读取加...
  • 图片异步加载

    2013-08-06 09:37:23
    原创文章,转载请注明:...当在ListView或GridView中要加载很多图片时,很容易出现滑动时的卡顿现象,以及出现OOM导致FC(Force Close)。 会出现卡顿现象主要是因为加载数据慢,要等数据加载完才能显示出来。可以通过
  • 本文会定期更新,推荐watch下项目。如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request。 本文的示例代码主要是基于作者的经验来编写的,若你有其他的技巧和方法可以参与进来...
  • 很久之前就想弄这个仿微博的模板了,但是时间一直允许,这抽空弄出来了,主题简单明了,后台设置简单,无需复杂操作,比起以往的CMS主题要简单的多,太适合做个人博客的网站了,当然这太适合技术和科技播主们...
  • 前几天写了个java爬虫爬花瓣网,但是事后总感觉不够舒服,终于在今天下午写了个python爬虫(爬微博图片滴),写完之后就感觉舒服了,果然爬虫就应该用python来写,哈哈(这里开个玩笑,非引战言论)。话多说进入正题。1....
  • iOS 新浪微博客户端Demo实践之(三)微博主页

    千次阅读 热门讨论 2013-05-15 10:37:42
    上一篇sina微博Demo已经完成的认证,下面就开始进入微博相关内容的加载及显示。其实主要的工作就是调用微博API 加载相关的json数据,然后进行解析,然后在界面中进行组织好在tableview中进行显示。 这篇博文...
  • 一、概述 距离上一篇博客有段时间没更新了,主要是最近有些私事导致的,那么就先来一篇简单一点的博客脉动回来。 对于加载图片,大家都陌生,一般为了尽...其实对于图片加载还有种情况,就是单个图片非常巨大,并
  • 转载于 http://litten.github.io/2015/04/28/img-lazy-load/ ...其实,一开始让我在网页中加载一张图片,我是,是拒绝的…因为实在太简单了。...最近实现了个图片加载器,用于大型web前端项目中,关于加载图片这

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,806
精华内容 3,922
关键字:

微博只有图片加载不了