前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫-爬取彼岸图库图片案例

Python爬虫-爬取彼岸图库图片案例

作者头像
Reset
发布2022-12-27 16:13:10
4180
发布2022-12-27 16:13:10
举报
文章被收录于专栏:ResetReset

说明

不得使用本软件发布违反国家法律的非法广告信息,如色情,赌博等,其造成的一切后果与本作者无关 请自觉营造和谐良性的网络营销环境 违法行为一经发现 ,本作者有权终止服务并追究法律责任 本工具仅用于测试学习使用 本网站有部分内容来自互联网,如无意中侵犯了哪个媒体 、公司 、企业或个人等的知识产权,请来电或致函告之,本网站将在规定时间内给予删除等相关处理,若有涉及版权费等问题,请及时提供相关证明等材料并与我们联系,通过友好协商公平公正原则处理纠纷。

代码语言:javascript
复制
import re
import requests
from bs4 import BeautifulSoup
import os
from multiprocessing import Pool
import multiprocessing
import time
import sys  # 导入sys模块

#
sys.setrecursionlimit(3000)  # 将默认的递归深度修改为3000

src_re = re.compile(r'<img .*? src="(.*?)" .*?/>')

title_re = re.compile(r'<img .*? title="(.*?)"/>')

proxies = {"https": None, 'http': None}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 7.0; Win64; x64) AppleWebKit/4444.36 (KHTML, like Gecko) Chrome/96.0.4692.99 Safari/537.36 Edg/97.0.3333.69"
}


def saveFile(title, src, file_path):
    '''
    保存图片文件
    :param title: 图片名称
    :param src: 图片线上访问
    :param path: 图片保存到的文件夹地址
    '''
    image_data = requests.get(src, headers=headers, proxies=proxies).content
    image_path = file_path + '/' + title + '.jpg'
    with open(image_path, 'wb') as fp:
        fp.write(image_data)
        print("图片【", title, "】 下载成功!!")


def getData(item, file_path):
    href = 'https://pic.netbian.com' + item['href']
    # 进入详情
    response_text_images = requests.get(url=href, headers=headers, proxies=proxies).text
    bs_images = BeautifulSoup(response_text_images, 'html.parser')
    image_text = bs_images.find('a', id='img').encode('iso-8859-1').decode('gbk')
    src = 'https://pic.netbian.com' + re.findall(src_re, image_text)[0]
    title = re.findall(title_re, image_text)[0]
    return {"src": src, 'title': title, 'file_path': file_path}


def findSrc(src_url, page, category, types, file_path):
    print("types:", types[category])
    p = Pool(20)
    """
        查找图片地址
    :param src_url: 访问地址
    :param page:  下载的页数
    :param category:  类型
    :param types:  类型列表
    :param file_path:  类型列表
    """
    list_all = []
    for index in range(1, page + 1):
        if index != 1:
            src_new_url = src_url.format(type=types[category], prefix="_", index=str(index))
        else:
            src_new_url = src_url.format(type=types[category], prefix='', index='')
        print(src_new_url)
        response_text = requests.get(url=src_new_url, headers=headers, proxies=proxies).text
        bs = BeautifulSoup(response_text, 'html.parser')
        for item in bs.find("ul", class_='clearfix').find_all('a'):
            list_all.append(item)
    temp_list = []
    for item in list_all:
        temp_list.append((item, file_path))
    res = p.starmap_async(getData, temp_list)
    p.close()
    p.join()
    return res.get('value')


if __name__ == '__main__':
    multiprocessing.freeze_support()
    try:
        print("######################      不得使用本软件发布违反国家法律的非法广告信息 ######################")
        print("######################      如色情,赌博等,其造成的一切后果与本作者无关 ######################")
        print("######################      请自觉营造和谐良性的网络营销环境           ######################")
        print("######################      违法行为一经发现                        ######################")
        print("######################      本作者有权终止服务并追究法律责任           ######################")
        print("######################      本工具仅用于测试学习使用                  ######################")
        print("#########################   图片类型选择  ########################")
        print("类型1:4K风景图片")
        print("类型2:4K美女图片")
        print("类型3:4K游戏图片")
        print("类型4:4K动漫图片")
        print("类型5:4K影视图片")
        print("类型6:4K汽车图片")
        print("类型7:4K动物图片")
        print("类型8:4K人物图片")
        print("类型9:4K美食图片")
        print("类型10:4K宗教图片")
        print("类型11:4K背景图片")
        print("类型12:4K手机壁纸图片")
        print("类型13:最新图片")
        types = (
            '4kfengjing', '4kmeinv', '4kyouxi', '4kdongman', '4kyingshi', '4kqiche', '4kdongwu', '4krenwu', '4kmeishi',
            '4kzongjiao', '4kbeijing', 'shoujibizhi', 'new')
        print("######################################", types[2])
        category = input('请输入需要下载的类别数字(例如【4K风景图片】输入 1 ): ')
        page_size = int(input("请输入需要下载的页数: "))
        category = int(category) - 1
        print("######################################", category)
        file_path = types[category]
        print("##################################################")
        # 判断文件夹是否存在
        if not os.path.exists('./' + file_path):
            # 创建文件夹
            os.mkdir('./' + file_path)

        url = 'https://pic.netbian.com/{type}/index{prefix}{index}.html'
        print('链接解析中,请稍后.............')
        parse_start_time = time.time()
        images_list = findSrc(url, page_size, category, types, file_path)
        print('链接解析成功,用时:', time.time() - parse_start_time, '共有图片:', len(images_list), '张')
        temp_list = []
        for item in images_list:
            temp_list.append((item.get('title'), item.get('src'), item.get('file_path')))
        start_time = time.time()
        pool = Pool(25)
        pool.starmap_async(saveFile, temp_list)
        pool.close()
        pool.join()
        end_time = time.time()
        print('下载用时:', end_time - start_time)
    except AttributeError:
        print('解析失败,可能IP已被屏蔽!!')

Requests

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档