利用python爬取网站图片并制作蒙太奇风格图片

目标网站是http://www.netbian.com。
python版本为3.7,使用的库有requests、pyquery、pyquery,如果有缺少可以使用pip install 缺少的库来安装。

import requests
from pyquery import PyQuery
import time

首先打开网站来分析:打开目标网站,按F12打开源码,检查图片元素
利用python爬取网站图片并制作蒙太奇风格图片_第1张图片
发现图片元素是在div class=list下ul下li的img。下面来写爬取的代码:
首先构建headers信息
没有这个属性有的网站可能会无法爬取。

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 '
                  '(KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
}

然后就是获取网站的源码

def start_request(url):     #获取目标网站的源码
    r = requests.get(url, headers=headers, proxies=proxies)   #此处proxies参数为代理IP,可以去掉
    r.encoding = 'GBK'      #在F12页面看网站的头信息,发现是,
                            # 就是GBK编码,如果不设置就会乱码
    html = r.text
    return html

这个网站的编码格式时gbk,所以设置GBK格式,否则会乱码
在这里插入图片描述
再然后就是解析网站,获得图片信息了

def parse(text, times):     #将网站的源码解析
    doc = PyQuery(text)          #使用pyquery库的PyQuery
    images = doc('div.list ul li img').items()  #根据开始的分析,找到img图片的位置
    x = 1 + times*18        #由于每页有18个图片,因此计数时设置参数
    for image in images:
        img_url = image.attr('src')     # 获取每一张图片的链接
        img = requests.get(img_url, headers=headers, proxies=proxies).content      # 获得每张图片的二进制内容
        with open(str(x)+'.jpg', 'wb') as f:    #将图片的二进制内容写入硬盘,这里用'wb'
            f.write(img)
            time.sleep(0.1)     #设置短暂时间,防止被禁
            print("正在下载第{}张图片".format(x))
            x += 1
    print("第{}页写入完成".format(times+5))

这里我们爬取多页的图片,我们前面获取网站源码就是获取的每一个页面(第一页)的源码,如果要爬取下一个页面(第二页),那么就需要传入下一个页面的url
main方法

def main(x):
    url = "http://www.netbian.com/index_" + str(x) + ".htm"     #写网页的url
    text = start_request(url)
    parse(text, times=x-2)


if __name__ == "__main__":      #设置循环次数即爬去的页数
    for i in range(5, 100):     #从第五页开始爬取
        main(x = i)

获得多个页面url的方法和img是相同的——观察。我们在第一页可能看不出来,那么看第二页,第三页的网址
在这里插入图片描述在这里插入图片描述
发现规律了吧?相信你这时候再看main函数的第一句获取url的代码就明白了。
将以上代码连起来就能运行了(保存图片的位置就是当前项目的路径的位置,也可以自行设置)

利用python爬取网站图片并制作蒙太奇风格图片_第2张图片
这就是爬取的结果了。
下面来介绍一个比较有意思的库——photomosaic
如果没有的话可以使用pip install photomosaic来安装
先看效果图
利用python爬取网站图片并制作蒙太奇风格图片_第3张图片
代码很简单,只有四行

image = photomosaic.imread("basketball.jpg") #我们要合成的图片模板,
                                             # 位置就是当前项目的路径(也是刚才爬取图片的路径)
pool = photomosaic.make_pool('*.jpg')       #图片池,这里用我们刚才爬取的图片
mosaic = photomosaic.basic_mosaic(image, pool, (100, 100))      #最后一个参数是要合成图片的长宽使用的图片数量
photomosaic.imsave(os.getcwd() + '/output/basketball_mosaic.jpg ', mosaic)  #我们将合成的图片放到output文件夹里(不会乱)

代码主要学习自崔庆才大佬

你可能感兴趣的:(利用python爬取网站图片并制作蒙太奇风格图片)