很久之前写的爬虫,一直没有放出来,这次放出来,单线程爬取,又有延时,所以有点慢。不过这也不耽误爬取了一个人的2万多张写真套图,因为这个人的很好看,哈哈哈。。。不过后来又全都删了,因为又发现了更好的网站。
爬取美女的个人写真套图,图片很养眼。。。都懂的。具体的步骤就不讲了,注释写的很详细。网站地址因为审核的原因也没有办法放。要是有人知道这个网址,在本文的网站地址处加上网址就可以养眼了。
最重要的一点:注意身体。。。
"""
requests库请求目标网址xpath提取网页的图片地址os模块建立文件夹存储图片面向函数编程个人写真套图爬取"""
# 导入第三方库
import requests
from lxml import etree
import time
import os
from fake_useragent import UserAgent# 定义随机的UserAgent
headers = {'User-Agent': UserAgent().random, 'accept-language': 'zh-CN,zh;q=0.9'}# 定义得到首页的html的函数
def get_html(url):many_list_detail = []time.sleep(0.1)# 如果用.text()则出现乱码的情况,所以采用utf-8方式解码html = requests.get(url, headers=headers).content.decode('utf-8')many_list_detail.append(url)many_list_detail.append(html)return many_list_detail# 定义解析详情页的函数
def detail_save_pages(many_list):# 新建空列表detail = []e = etree.HTML(many_list[1])# 解析每一层图片的总页数nums = e.xpath('//div[@class="imageset"]/span[@class="imageset-sum"]/text()')# 遍历循环每一页,总数为每一层图片的总页数page_nums = int(nums[0].split(' ')[1]) + 1for page in range(1, page_nums):# 由于每层图片的第一页地址与以后的地址不一样,需要单独处理。if page == 1:# 解析html文档e = etree.HTML(many_list[1])# xpath提取图片地址image = e.xpath('//div[@class="img_box"]/a/img/@src')# 将图片地址添加到列表中detail.extend(image)else:# 由于是请求每一层的全部图片,每一层的url各不相同,需要构造url,以首页url为基准,先以'_'号将url分割为两部分,中间加上'_'# 第二部分取以'_'分割的第二部分并再以'.'分割,加上'_' 加上page 加上.htmlurls = str(many_list[0]).split('_')[0] + '_' + str(many_list[0]).split('_')[1].split('.')[0] + '_' + str(page) + '.html'# 请求构造的urltime.sleep(0.1)html = requests.get(url=urls, headers=headers).content.decode('utf-8')e = etree.HTML(html)# 提取图片的地址image = e.xpath('//div[@class="img_box"]/a/img/@src')detail.extend(image)# 遍历循环列表,添加到列表中for page_list, det in zip(range(1, page_nums), detail):# 请求每一张图片的urltime.sleep(0.05)r = requests.get(url=det, headers=headers)# 定义每一张图片的名字file_name = det.split('/')[-1]# 写入图片文件with open(temp + '/' + file_name, 'wb') as f:print("正在下载:" + det + " 第" + str(page_list) + "张")f.write(r.content)# 定义主函数def main():# 创建文件夹if not os.path.exists(temp):os.mkdir(temp)# 首页的url地址url = '图片网址'many_html = get_html(url)detail_save_pages(many_html)if __name__ == '__main__':temp = input("请输入需要保存的文件名称:\n")print("正在解析,请稍等...")main()