携手创作,共同成长!这是我参与「掘金日新计划 · 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))
———————————————— ]