精华内容
下载资源
问答
  • 1.抓包工具 network 中的某个网页中的response,中返回的这个网页,在里面搜索是否有关键字 (ctrl+F )若没有,则是动态加载出来的 2.从全局搜索,然后自动定位到网站就可以找到这个动态加载的数据 ...

    怎样判断是否是动态加载的数据

    1.抓包工具 network 中的某个网页中的response,中返回的这个网页,在里面搜索是否有关键字 (ctrl+F )若没有,则是动态加载出来的
    2.从全局搜索,然后自动定位到网站就可以找到这个动态加载的数据

    展开全文
  • Python3获取京东商品列表信息,并根据列表信息地址提取信息详情页的相关图片(京东商品详情信息图片采用JS动态加载,需控制网页滚动至一定位置才能加载,初始的静态页面没有商品图片),因此本文采用两种方法加载...

    Python3获取京东商品列表信息,并根据列表信息地址提取信息详情页的相关图片(京东商品详情信息图片采用JS动态加载,需控制网页滚动至一定位置才能加载,初始的静态页面没有商品图片),因此本文采用两种方法加载网页:一种是加载商品列表页(如图1所示),并提取其中的商品列表地址;另一种是根据商品详情页的内容(如图2),控制滚动条滚动至页面底端,确保商品详情图片加载完毕,然后获取网页信息,提取图片地址,最后完成下载,下载流程如图3,主要基于python3采用requests、BeautifulSoup、webdriver包。

    代码实现:

    第一步:获取商品列表页内容,该页面为静态页面,采用requests包实现,并采用beautifulsoup包筛选网页内容,获取商品详情页地址,代码如下 

    if __name__=='__main__':
    
       try:
          url="https://search.jd.com/Search?keyword=%E9%A3%8E%E8%A1%A3%E7%94%B7&enc=utf-8&suggest=2.def.0.V01--12s0,20s0,38s0,97s0&wq=fengyi&pvid=50ceb61c8ad04e0f9d9ab28abfecbd82"
          html=DownLoadImg.GetHtml(url)
          soup=BeautifulSoup(html.text,'html.parser')
          urls=soup.select('.p-name-type-2>a')
          for uu in urls:
             itemImg=uu['href']
             if itemImg.startswith("//"):
                itemImg=itemImg.replace("//","https://").strip()
    
             print(itemImg)
             #time.sleep(5)
             DownLoadImg.Down(itemImg,'999')
          #DownLoadImg.Down('https://item.jd.com/34615071979.html','999')
       except Exception as e:
          print('chucuo')
          raise e

    第二步:根据商品详情页地址,采用webdriver包,模拟人工操作(基于谷歌浏览器),将页面滚动至网页底端,加载商品详情相关内容(注:商品详情内容为动态加载,当仅仅打开页面时,商品详情相关内容并不主动加载,因此需人工模拟滚动),代码如下:

    # 获取网页源代码,动态内容获取
       def get_html_page(url):
           try:
               driver = webdriver.Chrome(executable_path=driver_path)
               driver.get(url)
               time.sleep(3)
               # 执行页面向下滑至底部的动作
               driver.execute_script("window.scrollTo(0,document.body.scrollHeight);")
               # 停顿5秒等待页面加载完毕!!!(必须留有页面加载的时间,否则获得的源代码会不完整。)
               time.sleep(3)
               html_sourcode = driver.page_source
               driver.close()
               return html_sourcode
           except Exception as e:
               print(e)

    第三步:在模拟人工网页滚动后,根据获取的网页内容,采用beautifulsoup包,筛选网页中图片地址,然后进行下载(本文在代码所在文件夹创建文件夹,将下载图片保存至此)。

     #下载新内容所在网页地址
       def Down(url,DicName):
          req=DownLoadImg.get_html_page(url)
          #print(req)
          try:
             if req=="":
                print('网址内容为空')
             else:
                soup=BeautifulSoup(req,'html.parser')
                ll=soup.select('#J-detail-content img[src]')
                #print(ll)
                #创建存储路径
                file_dir=os.getcwd()
                file_path=os.path.join(file_dir,DicName)
                check_excists=os.path.exists(file_path)
                if not check_excists:
                   os.makedirs(file_path)
                count_num=0
                for img in ll:
    
                   imgurl=img.get('src').strip()
                   count_num=count_num+1
                   now_time=datetime.now().strftime('%m%d_%S')
                   image_name=r"{0}\{1}_image_{2}.jpg".format(file_path,now_time,count_num)
                   if imgurl.startswith("//"):    
                      imgurl=imgurl.replace("//","http://")
                   #print(imgurl)
    
                   r=requests.get(imgurl,timeout=30)
                   #print(r)
    
                   with open(image_name,'wb') as fw:
                      fw.write(r.content)
    
    
                   print("save image:{0}".format(count_num))

    至此操作完成,本文主要针对网页动态资源进行学习,欢迎探讨,完整代码详见作者上传资源。

    参考文档:

    https://blog.csdn.net/slhlde/article/details/81937838

    https://blog.csdn.net/weixin_38917807/article/details/81386175

    展开全文
  • 大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序加快了页面加载的速度,对于比较长的...
    大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较长的页面来说,这个方案是比较好的。
    

    实现原理 
    把所有需要延时加载的图片改成如下的格式:
    <img lazy_src="图片路径" border="0"/>

    然后在页面加载时,把所有使用了lazy_src的图片都保存到数组里,然后在滚动时计算可视区域的top,然后把延时加载的图片中top小于当前可视区域(即图片出现在可视区域内)的图片的src的值用lazy_src的来替换(加载图片)。


    代码:

    // JavaScript Document
    lazyLoad=(function() {
    var map_element = {};
    var element_obj = [];
    var download_count = 0;
    var last_offset = -1;
    var doc_body;
    var doc_element;
    var lazy_load_tag;
    function initVar(tags) {
    doc_body = document.body;
    doc_element = document.compatMode == 'BackCompat' ? doc_body: document.documentElement;
    lazy_load_tag = tags || ["img", "iframe"];
    };

    function initElementMap() {
    var all_element = [];
    //从所有相关元素中找出需要延时加载的元素
    for (var i = 0,len = lazy_load_tag.length; i < len; i++) {
    var el = document.getElementsByTagName(lazy_load_tag[i]);
    for (var j = 0,len2 = el.length; j < len2; j++) {
    if (typeof(el[j]) == "object" && el[j].getAttribute("lazy_src")) {
    element_obj.push(all_element[key]);
    }
    }
    }
    for (var i = 0, len = element_obj.length; i < len; i++) {
    var o_img = element_obj[i];
    var t_index = getAbsoluteTop(o_img);//得到图片相对document的距上距离
    if (map_element[t_index]) {
    map_element[t_index].push(i);
    }
    else {
    //按距上距离保存一个队列
    var t_array = [];
    t_array[0] = i;
    map_element[t_index] = t_array;
    download_count++;//需要延时加载的图片数量
    }
    }
    };

    function initDownloadListen() {
    if (!download_count) return;
    var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop: doc_element.scrollTop;
    //可视化区域的offtset=document的高+
    var visio_offset = offset + doc_element.clientHeight;
    if (last_offset == visio_offset) {
    setTimeout(initDownloadListen, 200);
    return;
    }

    last_offset = visio_offset;
    var visio_height = doc_element.clientHeight;
    var img_show_height = visio_height + offset;
    for (var key in map_element) {
    if (img_show_height > key) {
    var t_o = map_element[key];
    var img_vl = t_o.length;
    for (var l = 0; l < img_vl; l++) {
    element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute("lazy_src");
    }
    delete map_element[key];
    download_count--;
    }
    }
    setTimeout(initDownloadListen, 200);
    };

    function getAbsoluteTop(element) {
    if (arguments.length != 1 || element == null) {
    return null;
    }
    var offsetTop = element.offsetTop;
    while (element = element.offsetParent) {
    offsetTop += element.offsetTop;
    }
    return offsetTop;
    }

    function init(tags) {
    initVar(tags);
    initElementMap();
    initDownloadListen();
    };

    return {
    init: init
    }
    })();

    使用方法:

    把页面上需要延时加载的图片src改成为lazy_src,然后把上面的js放到body最后面,再调用:lazyLoad.init();


    调试的方法可以使用firebug来查看一时图片是否是延时加载。


    说明:

    如果你的页面上存在有内容切换的栏目的话,可能在切换时切换的内容里的图片可能会不显示,处理的方法是在内容时单独图片加载处理,如:

    ///切换内容的代码

    chlid.find("img[init_src]").each(function(){
      $(this).attr("src",$(this).attr("init_src"));
      $(this).removeAttr("init_src");
    });

    展开全文
  • 网页加载图片延迟加载,显示当前屏时加载
  • 系列之二——爬取动态加载网页图片 在上一篇中我们提到了如何爬取静态网页,静态网页方便爬取是因为我们查看网页元素然后直接爬取信息就可以。 然而动态网页比如常见的js动态生成,用静态方法访问网站并且获取...

    系列之二——爬取动态加载网页的图片

    在上一篇中我们提到了如何爬取静态网页,静态网页方便爬取是因为我们查看网页元素然后直接爬取信息就可以。

    然而动态网页比如常见的js动态生成,用静态方法访问网站并且获取html时,js动态生成的这一部分还没有生成,所以静态方法获取不了这一部分信息。

    我采用的例子是动漫之家(仅学习用,若涉及侵权请联系我,我会下架本文章)

     

    我使用的是selenium的webdriver,我个人理解webdriver是模拟用户用浏览器访问网络,只不过不是用户亲自用鼠标是双击,而是用的代码。在这里本人使用的是Firefox浏览器。

    webdriver的使用方法非常简单

            dr = webdriver.Firefox()
            dr.get(url)

     这样我们运行代码的话就会自动弹出一个火狐浏览器,并且该浏览器正在访问我们输入的url

    但是我们总不想当我们完成这个程序时,每次用户使用都会弹出浏览器,能不能让它自己静静的运行,不弹出来呢

    答案是可以的,我们可以使用无头浏览器,只需要简单的设置option就可以做到

    #无头浏览器 这样浏览器就不会弹出
            options = Options()
            options.add_argument('--headless')
    
            dr = webdriver.Firefox(options=options)

     接下来的步骤与静态网页类似,只不过我们用的是dr变量的find_elements系列方法。

    爬取静态网页

    具体代码如下

    import requests
    from bs4 import BeautifulSoup
    from selenium import webdriver
    from selenium.webdriver.firefox.options import  Options
    import queue
    import os
    from urllib.request import build_opener
    from urllib.request import install_opener
    from urllib.request import urlretrieve
    import threading
    #此份代码用---来连接划分漫画的不同属性
    def getComicUrl(url,source,q):
        try:
            response = requests.get(url)
            response.encoding = 'utf-8'
            page = BeautifulSoup(response.text, "lxml")
            total_html = page.find(name='div',attrs={"class":"cartoon_online_border"})
    
            #无头浏览器 这样浏览器就不会弹出
            options = Options()
            options.add_argument('--headless')
    
            dr = webdriver.Firefox(options=options)
            # 共有多少话
            for i in total_html.find_all('li'):
                href = i.a['href']
                href=source+href
                # 每话进行下载
                print(href)
                # 进入每一话页面 由于dmzj为js动态加载页面,所以用webdriver来获取
                each_url = href
                dr.get(url=each_url)
                # 找到该话总页数
                pages =dr.find_elements_by_xpath("//div[@class='btmBtnBox']/select/option")
                tempNum=len(pages)
                # 获取漫画名字与话数
                name = dr.find_elements_by_xpath("//div[@class='display_middle']/h1/a")[0].text\
                       +dr.find_elements_by_xpath("//div[@class='display_middle']/span")[0].text
                for page in pages:
                    page_url="https:"+page.get_attribute("value")
                    q.put(name+"---"+page_url+"---"+page.text)
    
    
            dr.close()
            dr.quit()
        except requests.exceptions.ConnectionError:
            print("输入url错误")
            return
    
    
    
    def dest_establish(dest):
        if not os.path.exists(dest):
            os.makedirs(dest)
    
    
    def downloadEveryPage(q,file_path):
        e=q.get()
        name=e.split('---')[0]
        source_pic=e.split('---')[1]
        ye_num=e.split('---')[2]
        # 下载
        filename=file_path+"/" + name + " " + ye_num + ".jpg"
        if not os.path.exists(filename):
            urlretrieve(url=source_pic, filename=filename)
        print("{name} {pageNum} 已经下载".format(name=name, pageNum=ye_num))
    
    def download(q,file_path):
        #简单的urlopener不能打开带cookie或者需要验证的高级网页,但是build_opener就支持,若是用
        #普通的urlopener此处会有ERROR 403
        opener=build_opener()
        opener.addheaders = [('User-Agent',
                              'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1941.0 Safari/537.36'),
                             ("Referer", "https://manhua.dmzj.com/")]
        install_opener(opener)
        while True:
            downloadEveryPage(q,file_path)
            q.task_done()
    
    def start_download_dmzj(url,file_path):
        # url = "https://manhua.dmzj.com/meikongjiejieyutianranmeimei"
        # url="https://manhua.dmzj.com/newgame"
        print("开始下载")
    
        source = "https://manhua.dmzj.com"
        q = queue.Queue(999)
        getComicUrl(url,source,q)
        threadNum = 7
        for i in range(0, threadNum):
            downloadThread = threading.Thread(target=download,args=(q,file_path))
            downloadThread.setDaemon(True)
            downloadThread.start()
        q.join()
    
    

     

     

     

    展开全文
  • 推荐移动端网页使用的图片加载
  • 有很多种方法来实现图片的预加载,通常大部分使用Javascript让事情滚动。不要再受Javascript预载的束缚了吧,用CSS你就可以毫不麻烦的预载你的图片
  • selenium 加载动态网页

    千次阅读 2020-06-23 11:44:15
    文章目录下载 chrome 驱动python 解压缩 ziprequests 下载网络文件使用 selenium 访问百度图片 在使用selenium 之前先要下载浏览器驱动 下载 chrome 驱动 python 解压缩 zip def un_zip(file_name, to_dir='./'): ...
  • 网页图片延迟加载插件,附带实例可运行.资源共享
  • Github网页上图片加载不出来

    千次阅读 2020-05-20 09:38:09
    解决Github网页上图片显示失败的问题: 复制raw.githubusercontent.com 去https://www.ipaddress.com搜索,把给出的IP地址存储到host文件中: 如199.232.28.133 raw.githubusercontent.com Windows的host文件...
  • 当页面里的图片很多时,您可以使用图片滚动条加载的方式来加快网页的打开速度,现在主流的网站都使用这种技术,包括京东等电子商务网站。
  • 网页加载图片翻转

    2021-06-04 05:14:24
    网页加载图片翻转
  • 使用python抓取js动态加载网页

    万次阅读 2015-10-19 11:49:11
    但是有时候我们遇见那种使用js动态加载网页。就会发现urllib只能抓出一个部分内容空白的网页。 解决办法是使用selenium+phantomjs进行抓取。。。 审查元素之后,。发现百度图片中,显示图片的div为:pull...
  • 这是一款通过分页按钮控制动态加载图片列表代码,jQuery无刷新分页加载图片列表网页特效。
  • 网页加载动态旋转动画CSS3特效代码下载。一套css3旋转加载效果。
  • 主要为大家介绍了js实现网页图片延时加载,提升网页打开速度,感兴趣的小伙伴们可以参考一下
  • 网页图片延迟加载

    2014-08-05 17:47:09
    看到很多大型的网站,都实现了图片延迟加载,即在浏览器的可视范围内才加载图片。这样最大的一个好处就是节约带宽提高用户体验,特别是对于访问量高的大型网站就显得尤为重要,往往大部分网站的流量都是图片大于文本...
  • 这是一个实现网页图片加载的jquery插件,使用方式非常简便,效果还行。
  • jQuery网页图片延迟加载代码基于jquery-1.8.3.min.js制作,实现图片预加载效果,代码附详细中文注释,使用方便。
  • 许多人在遇到网页动态加载数据的时候都习惯于使用selenium webdriver这款自动化测试工具,对接浏览器驱动可以实现对javascript代码的逆向解析。但这种方式有1个明显的弊端:性能太差。更重要的是,其采集效率的...
  • 如何使网页图片加载速度更快Websites are usually static or dynamic in nature based on the type of content they have. Some websites which require content to be updated on a regular basis are dynamic in ...
  • 网页性能优化之图片加载

    千次阅读 多人点赞 2020-01-14 10:33:19
    一、前言 ...于是就想到了图片加载来减轻服务器的压力,优先加载可视区域的内容,其他部分等进入了可视区域再加载,从而提高性能,可以大幅度的提高网页加载速度,效果很明显,于是想着将这个方...
  • 主要介绍了浅谈移动端网页图片加载方案 的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • jQuery网页图片延迟加载代码基于jquery-1.8.3.min.js制作,实现图片预加载效果,代码附详细中文注释,使用方便。
  • 大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序加快了页面加载的速度,对于比较长的...
  • 网页图片的懒加载和预加载

    千次阅读 2016-07-20 16:34:06
    网页涉及到大量图片时,由于图片大量加载,导致页面会出现一段时间的“空白”,应对这种情况需要用到图片的懒加载和预加载技术, 预加载主要原理::提前加载图片,当用户需要查看时可直接从本地缓存中渲染。在含有...
  • 很多加载图片,希望对你制作loading有帮助

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,568
精华内容 61,427
关键字:

网页上的图片是如何动态加载的