• python爬取网页图片


    用搜狗为例子:

      前提: 环境都OK前提,  安装了python环境  以及  idea工具  或者 pycharm工具 等其他编译工具

        首先我们进入搜狗图片 http://pic.sogou.com/,进入壁纸分类(当然只是个例子Q_Q),因为如果需要爬取某网站资料,那么就要初步的了解它…

    进去后就是这个啦,然后F12进入开发人员选项,笔者用的是Chrome。

    右键图片>>检查    

    发现我们需要的图片src是在img标签下的,于是先试着用 Python 的 requests提取该组件,进而获取img的src然后使用 urllib.request.urlretrieve逐个下载图片,从而达到批量获取资料的目的,思路好了,下面应该告诉程序要爬取的url为http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD,此url来自进入分类后的地址栏。明白了url地址我们来开始愉快的代码时间吧:

    在写这段爬虫程序的时候,最好要逐步调试,确保我们的每一步操作正确,这也是程序猿应该有的好习惯。笔者不知道自己算不算个程序猿哈。线面我们来剖析该url指向的网页。

    import requests
    import urllib
    from bs4 import BeautifulSoup
    res = requests.get('http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD')
    soup = BeautifulSoup(res.text,'html.parser')
    print(soup.select('img'))

    output:

     发现输出内容并不包含我们要的图片元素,而是只剖析到logo的img,这显然不是我们想要的。也就是说需要的图片资料不在url  即 http://pic.sogou.com/pics/recommend?category=%B1%DA%D6%BD里面。因此考虑可能该元素是动态的,细心的同学可能会发现,当在网页内,向下滑动鼠标滚轮,图片是动态刷新出来的,也就是说,该网页并不是一次加载出全部资源,而是动态加载资源。这也避免了因为网页过于臃肿,而影响加载速度。下面痛苦的探索开始了,我们是要找到所有图片的真正的url 笔者也是刚刚接触,找这个不是太有经验。最后找的位置F12>>Network>>XHR>>(点击XHR下的文件)>>Preview。

     

    发现,有点接近我们需要的元素了,点开all_items 发现下面是0 1 2 3...一个一个的貌似是图片元素。试着打开一个url。发现真的是图片的地址。找到目标之后。点击XHR下的Headers

    得到第二行

    Request URL:
    http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15&width=1536&height=864,试着去掉一些不必要的部分,技巧就是,删掉可能的部分之后,访问不受影响。经笔者筛选。最后得到的url:http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category=%E5%A3%81%E7%BA%B8&tag=%E5%85%A8%E9%83%A8&start=0&len=15  字面意思,知道category后面可能为分类。start为开始下标,len为长度,也即图片的数量。好了,开始愉快的代码时间吧:
     
    大熊在这里也是边调试边写,这里把最终的代码贴出来:
     
    import requests
    import json
    import urllib
    
    def getSogouImag(category,length,path):
        n = length
        cate = category
        imgs = requests.get('http://pic.sogou.com/pics/channel/getAllRecomPicByTag.jsp?category='+cate+'&tag=%E5%85%A8%E9%83%A8&start=0&len='+str(n))
        jd = json.loads(imgs.text)
        jd = jd['all_items']
        imgs_url = []
        for j in jd:
            imgs_url.append(j['bthumbUrl'])
        m = 0
        for img_url in imgs_url:
                print('***** '+str(m)+'.jpg *****'+'   Downloading...')
                urllib.request.urlretrieve(img_url,path+str(m)+'.jpg')
                m = m + 1
        print('Download complete!')
    
    getSogouImag('壁纸',2000,'d:/download/壁纸/')    //更具自己需要  随便放哪个文件夹;  e:/xxx也行

     

    至此,关于该爬虫程序的编程过程叙述完毕。整体来看,找到需要爬取元素所在url,是爬虫诸多环节中的关键

    参考链接:  https://www.cnblogs.com/dearvee/p/6558571.html

  • 相关阅读:
    VCalendar
    xls和xlsx的区别
    alioss的常见问题
    别再写 shǐ 山代码了。。。
    一款高颜值的 MySQL 管理工具,超好用。。
    Spring Boot Admin 横空出世!
    Redis 官方可视化工具,功能真心强大。。。
    Nginx 从安装到高可用,一篇搞定,99% 的人都收藏了。。
    duobule 转 int 问题
    mysql慢sql查询
  • 原文地址:https://www.cnblogs.com/520BigBear/p/14281080.html
Copyright © 2020-2023  润新知