很久之前写的爬虫,一直没有放出来,这次放出来,单线程爬取,又有延时,所以有点慢。不过这也不耽误爬取了一个人的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]) + 1
for 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 加上.html
urls = str(many_list[0]).split('_')[0] + '_' + str(many_list[0]).split('_')[1].split('.')[0] + '_' + str(
page) + '.html'
# 请求构造的url
time.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):
# 请求每一张图片的url
time.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()