celebs名人写真图片数据采集,先下载100个G再说

310 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情 大家好,我是辣条。

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

采集目标 数据来源: 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 = 'celebs-place.com/photos/peop…' 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 = '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在这里插入图片描述 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 = 'celebs-place.com/photos/peop…' 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 = '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 = "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))

———————————————— ]