首页 > 技术文章 > celebs名人写真图片数据采集,先下载100个G再说

ai19970205 2021-08-18 15:59 原文

大家好,我是辣条。

今天给大家带来一个宝藏网站,国外名人明星的写真图片网站,冒着进小黑屋的风险出爬虫实战,仅供学习交流!侵删!希望大家给个三连支持。

在这里插入图片描述

采集目标

数据来源: celebs-place

在这里插入图片描述

工具准备

开发环境:win10、python3.7

开发工具:pycharm、Chrome

使用工具包:requests,lxml, os

项目思路

网页图片数据量过大,以单独的一项展示学习 选取单独的A分类

在这里插入图片描述

requests发送网络请求

 

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
url = 'https://celebs-place.com/photos/people-A.html'
response = requests.get(url, headers=headers)

xpath提取对应明星a标签的href属性和明星名字

在这里插入图片描述

html_data = etree.HTML(response.text)
celebs_url_list = html_data.xpath('//div[@class="model_card"]/a/@href')
name_list = html_data.xpath('//div[@class="model_card"]/a/div/span/text()')
拼接详情页面url地址, 判断是否能获取数据 提取详情页面所以的url地址 (“你问为啥不获取具体的页数,因为懒!!!!”) 

在这里插入图片描述

   for page in range(1, 50):
        url_detail = 'https://celebs-place.com' + celebs_url + 'page{}/'
​
        res = requests.get(url_detail.format(page), headers=headers).text
        # print(res)
        data = etree.HTML(res)
        img_url_list = data.xpath("//div[@class='gallery-p![在这里插入图片描述](https://img-blog.csdnimg.cn/20210520194629112.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1MDc1MTE4,size_16,color_FFFFFF,t_70)
ics-list'][1]/div/a/img/@src")
        if not img_url_list:
            break

保存的文件夹可以手动创建(最好是代码创建,避免各位大佬在使用代码时有不必要的纠纷 狗头保命)

path = "你的文件路径"
    if not os.path.exists(path):
        os.mkdir(path)

获取的图片url是小图标的 详细的图片是大图 去除图片url的/cache和后半部分就是大图url(‘-gthumb-gwdata240-ghdata300.jpg’) 提取到准确的图片url地址 请求图片数据,保存对应图片到文件夹

在这里插入图片描述

        for img_url in img_url_list:
            img = "https://celebs-place.com/" + img_url.split('-g')[0].split('/cache/')[1] + '.jpg'
            result = requests.get(img, headers=headers).content

当前网页图片的数据量比较大,有几百G,没有特别需要图片数据的可以和辣条一样做一个文明的爬虫君。

项目思路总结

  • 获取到对明星的分类

  • requests发送网络请求

  • xpath提取数据

  • 保存数据到文件

简易源码分享

from lxml import etree
import requests
import os
​
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
url = 'https://celebs-place.com/photos/people-A.html'
response = requests.get(url, headers=headers)
# print(response.text)
html_data = etree.HTML(response.text)
celebs_url_list = html_data.xpath('//div[@class="model_card"]/a/@href')
name_list = html_data.xpath('//div[@class="model_card"]/a/div/span/text()')
​
for celebs_url, celebs_name in zip(celebs_url_list, name_list):
    path = r'E:\python_project\vip_course\celebs_place\img' + "\\" + celebs_name
    if not os.path.exists(path):
        os.mkdir(path)
    num = 0
    for page in range(1, 20):
        url_detail = 'https://celebs-place.com' + celebs_url + 'page{}/'
​
        res = requests.get(url_detail.format(page), headers=headers).text
        # print(res)
        data = etree.HTML(res)
        img_url_list = data.xpath("//div[@class='gallery-pics-list'][1]/div/a/img/@src")
        if not img_url_list:
            break
        # print(img_url)
        for img_url in img_url_list:
            img = "https://celebs-place.com/" + img_url
            result = requests.get(img, headers=headers).content
            f = open(path + "\\" + str(num) + ".jpg", "wb")
            f.write(result)
            num += 1
            print("正在下载{}第{}页第{}张".format(celebs_name, page, num))

推荐阅读