大家好,我是辣条。
今天给大家带来一个宝藏网站,国外名人明星的写真图片网站,冒着进小黑屋的风险出爬虫实战,仅供学习交流!侵删!希望大家给个三连支持。
采集目标
数据来源: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 ="你的文件路径"ifnotos.path.exists(path): os.mkdir(path)
获取的图片url是小图标的 详细的图片是大图 去除图片url的/cache和后半部分就是大图url(‘-gthumb-gwdata240-ghdata300.jpg’) 提取到准确的图片url地址 请求图片数据,保存对应图片到文件夹
forimg_urlinimg_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提取数据
保存数据到文件
简易源码分享
fromlxmlimportetreeimportrequestsimportosheaders = {'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()')forcelebs_url, celebs_nameinzip(celebs_url_list, name_list): path =r'E:\python_project\vip_course\celebs_place\img'+"\\"+ celebs_nameifnotos.path.exists(path): os.mkdir(path) num =0forpageinrange(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")ifnotimg_url_list:break# print(img_url)forimg_urlinimg_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 +=1print("正在下载{}第{}页第{}张".format(celebs_name, page, num))