Python爬取豆瓣裤袜视界高清大图

前言

今天刚好有个朋友托我写一个脚本,需求是爬取他刚看的一部动漫的剧照,于是我就开始着手满足他这个需求哈哈哈~因为这个脚本涉及到一些批量拿站也会用到的模块,所以就归类到Python渗透编程里了,我会分3步简要的说一下这个脚本的编写思路。

第一步:整合URL

我首先看了一下网站的URL结构,这种爬图的活儿有点像套娃,需要一层一层的去进行数据清洗,直到得到真正的地址.jpg

其实脚本很好理解,需要你掌握Python的正则,我这里有本详细的Python正则等待你的查收!
Python正则武林秘籍
在这里插入图片描述
这里还需要翻页,所以要做两个正则,分两次for循环传递
在这里插入图片描述

右键去看一下源码,构思一下正则
在这里插入图片描述
这样第一步的代码就出来了:

#get_num()的作用是整合裤袜视界全部图片的url
def get_num(url1):
    url = 'https://movie.douban.com/subject/30419644/photos?type=S'
    req = requests.get(url=url,headers=header)
    html = req.text
    page = re.findall(r'<a href=\"https://movie\.douban\.com/photos/photo/(.*?)\">',html)
    pages = re.findall(r'<a href=\"(.*?)\" >\d</a>',html)
    # 这里过滤一下需要跳转的页面的url,传给turn_page()进行处理
    for j in pages:
        turn_page(j)
    #在这里把过滤出来的url列表赋值给i,拼接后传递给函数get_img_url()
    for i in page:
        url2 = url1+i
        get_img_url(url2)

这是自动翻页的代码:

# 这里获取翻页的url并进行二次处理
def turn_page(page):
    host = 'https://movie.douban.com/photos/photo/'
    url = page
    req = requests.get(url=url,headers=header)
    html = req.text
    pages = re.findall(r'<a href=\"https://movie\.douban\.com/photos/photo/(.*?)\">',html)
    for j in pages:
        url2 = host+j
        get_img_url(url2)

第二步:过滤URL

整合完url后,点进去发现还需要再深入的整合一遍
在这里插入图片描述
于是再一次的去构造正则
在这里插入图片描述
第三段代码:

#这里做了一次数据清洗,从传递过来的url中爬取图片的真实url
def get_img_url(url2):
    req = requests.get(url=url2,headers=header)
    html = req.text
    url = re.findall(r'<img src=\"(.*?)\" width=\"686\" />',html)
    down_img(url)

第三步:批量下载图片

这里经过最终的过滤后,获取到真正的图片.jpg,下载,收工!
在这里插入图片描述

# 最后把处理好的url,再进行一次清洗,得到真正的图片地址~
def down_img(url3):
    # 用for循环接收传递过来的url列表
    for img_url in url3:
        req = requests.get(url=img_url,headers=header)
        img = req.content
        img_url = img_url
        # 这里为了避免图片因重名而覆盖,采用split()方式分割取值来命名
        img_name = img_url.split('/')[-1]
        local_name = '/'+'Pantyhose'+'/'+img_name
        # 这里就开始下载了~最后为了避免被封IP,sleep了一下
        with open(local_name,'wb') as f:
            print '正在下载{}......'.format(local_name)
            f.write(img)
            print '下载完毕,请查看!'
            time.sleep(3)

完整代码

注:这里的解释器是Python2.7,不是3.8,用Python3的同学得改一下代码!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/10/13 16:50
# @Author  : Shadow
# @Site    : 
# @File    : Panty_hose.py
# @Software: PyCharm

# 建议从底部开始食用
import requests
import re
import os
import time


# 最后把处理好的url,再进行一次清洗,得到真正的图片地址~
def down_img(url3):
    # 用for循环接收传递过来的url列表
    for img_url in url3:
        req = requests.get(url=img_url,headers=header)
        img = req.content
        img_url = img_url
        # 这里为了避免图片因重名而覆盖,采用split()方式分割取值来命名
        img_name = img_url.split('/')[-1]
        local_name = '/'+'Pantyhose'+'/'+img_name
        # 这里就开始下载了~最后为了避免被封IP,sleep了一下
        with open(local_name,'wb') as f:
            print '正在下载{}......'.format(local_name)
            f.write(img)
            print '下载完毕,请查看!'
            time.sleep(3)

# 这里做了一次数据清洗,从传递过来的url中爬取图片的真实url
def get_img_url(url2):
    req = requests.get(url=url2,headers=header)
    html = req.text
    url = re.findall(r'<img src=\"(.*?)\" width=\"686\" />',html)
    down_img(url)

# 这里获取翻页的url并进行二次处理
def turn_page(page):
    host = 'https://movie.douban.com/photos/photo/'
    url = page
    req = requests.get(url=url,headers=header)
    html = req.text
    pages = re.findall(r'<a href=\"https://movie\.douban\.com/photos/photo/(.*?)\">',html)
    for j in pages:
        url2 = host+j
        get_img_url(url2)

# get_num()的作用是整合裤袜视界全部图片的url
def get_num(url1):
    url = 'https://movie.douban.com/subject/30419644/photos?type=S'
    req = requests.get(url=url,headers=header)
    html = req.text
    page = re.findall(r'<a href=\"https://movie\.douban\.com/photos/photo/(.*?)\">',html)
    pages = re.findall(r'<a href=\"(.*?)\" >\d</a>',html)
    # 这里过滤一下需要跳转的页面的url,传给turn_page()进行处理
    for j in pages:
        turn_page(j)
    # 在这里把过滤出来的url列表赋值给i,拼接后传递给函数get_img_url()
    for i in page:
        url2 = url1+i
        get_img_url(url2)

if __name__=='__main__':

    # 定义请求头
    header = {
    
    
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
    }

    # 定义图片存放目录
    dir = 'D:\Pantyhose'

    # 测试D盘是否已存在目录Pantyhose,若不存在则创建
    try:
        print '正在测试文件目录状态......'
        mkdir = os.mkdir(dir)
        if mkdir is False:
            print '已为您创建图片目录:' + dir
    # 若存在则输出路径
    except WindowsError:
        print '目录已存在:' + dir

    # 给老子爬!
    get_num('https://movie.douban.com/photos/photo/')

猜你喜欢

转载自blog.csdn.net/qq_43573676/article/details/109062860
今日推荐