吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4180|回复: 18
收起左侧

[Python 转载] python 彼岸4K爬虫代码

[复制链接]
hululove 发表于 2020-6-5 17:41
pool多进程有点异常 自己解决下就可
[Python] 纯文本查看 复制代码
#coding: utf-8
import requests
import os
import UserAgent
from multiprocessing import Pool
from lxml import etree



def get_groups(url, headers):  # 获得重要信息
    """根据传入的最初网址和标题头,获得每个专栏的网址和标题"""
    r = requests.get(url, headers=headers)
    r.encoding = r.apparent_encoding  # 转换编码
    if r.status_code == 200:
        html = etree.HTML(r.text)
        html = etree.tostring(html)
        html = etree.fromstring(html)
        url_list = html.xpath(r"//div[@class='classify clearfix']//a/@href")  # 获得网页分组的url
        name = html.xpath(r"//div[@class='classify clearfix']//a/text()")  # 获得网页分组的标题
        begin_down(name, url_list, headers)

    else:
        print('请求错误!')
    return name, url_list  # 把分组标题和分组网址回溯



def begin_down(title, url, headers):  # 下载选择
    print('破解方式下载VIP图片'.center(30, '-'))
    for i, j in enumerate(title):
        print(i, '\t\t\t\t\t', j)
    inp = int(input('输入下载选项:'))
    #print(title[inp], url[inp])
    get_image_1st(title[inp], url[inp], headers)  # 调用第一页的网址进行下载
    get_image(title[inp], url[inp], headers)  # 下载剩下的所有页

def get_image_1st(title, url, headers):  # 得到第一页的图片网址
    url_1st = 'http://pic.netbian.com/' + url  # 拼接分组网址
    r = requests.get(url_1st, headers)
    if r.status_code == 200:
        html = etree.HTML(r.text)
        html = etree.tostring(html)
        html = etree.fromstring(html)
        page_url = html.xpath(r'//ul[@class="clearfix"]//li/a/@href')  # 获得每张图片的真实网址
        print(page_url)
        page_url = ['http://pic.netbian.com' + i for i in page_url]  # 网址拼接
        pool_down(title, page_url, headers)  # 调用图片下载函数 下载选择页的 第一页全部图片,因为第一页网址特殊


def get_image(title, url, headers):  # 得到其他页的图片网址
    """找其他页的网址,然后找到每张图片的点击图片网址"""
    pages_url = []
    for i in range(2, 10):  # 我们假定最大翻页为10页
        other_url = 'http://pic.netbian.com' + url + 'index_' + str(i) + '.html'  # 拼接网址
        # print(other_url)
        r = requests.get(other_url, headers=headers)  # 尝试请求第二页 获得图片的点击网址
        if r.status_code == 200:
            html = etree.HTML(r.text)
            html = etree.tostring(html)
            html = etree.fromstring(html)
            page_url = html.xpath(r'//ul[@class="clearfix"]//li/a/@href')  # 获得每张图片的真实网址
            page_url = ['http://pic.netbian.com' + i for i in page_url]  # 网址拼接
            pages_url.append(page_url)
    pool_down(title, pages_url, headers)  # 调用下载

def image_down(title, page_url, headers):  # 下载图片
    if not os.path.exists(title + '//'):
        os.mkdir(title + '//')
        os.chdir(title + '//')
    else:
        os.chdir(title + '//')
    for i, j in enumerate(page_url):  # 遍历第一页的图表列表
        r = requests.get(j, headers=headers)  # 请求这个图片网址
        if r.status_code == 200:
            r.encoding = r.apparent_encoding  # 修改编码
            html = etree.HTML(r.text)
            html = etree.tostring(html)
            html = etree.fromstring(html)  # 以上搭建xpath对象
            url = html.xpath(r'//a[@id="img"]/img/@src')
            name = html.xpath(r'//a[@id="img"]/img/@title')
            rr = requests.get('http://pic.netbian.com' + ''.join(url), headers=headers)
            if rr.status_code == 200:  # 请求下载图片网址
                rr.encoding = rr.apparent_encoding  # 修改编码
                with open(''.join(name) + '.png', 'wb') as fw:
                    fw.write(rr.content)
                img = Image.open(''.join(name) + '.png')
                img = img.resize((4000, 2000), Image.ANTIALIAS)  # 改变大小 抗锯齿
                # print(img.size)
                img.save(''.join(name) + '.png', quality=95)  # 质量分数 95
                print(f'{title} 中第 {i + 1} 张下载完成!')
        else:
            print('错误啦')


def pool_down(title, page_url, headers):  # 线程下载
    try:
        # print(title, len(page_url))
        path = 'D://彼岸图库//'
        # 创建总的文件夹
        if not os.path.exists(path):
            os.mkdir(path)
            os.chdir(path)
        else:
            os.chdir(path)
        #  创建一个多线程下载
        pool = Pool(6)  # 一次6下
        if len(page_url) > 2:  # 如果是其他网址
            for i in page_url:
                pool.apply(image_down, args=(title, i, headers))
        elif len(page_url) == 1:  # 如果是第一页
            pool.apply(image_down, args=(title, page_url, headers))  # 调用线程池
        pool.close()
        pool.join()
    except Exception:
        print("Exception in worker:")
        pass

if __name__ == '__main__':
    headers = UserAgent.get_headers() # 随机获取一个headers
    url='http://pic.netbian.com'
    get_groups(url, headers)

免费评分

参与人数 2吾爱币 +4 热心值 +1 收起 理由
小屎球 + 1 代码挺多,可惜下载的只是缩略图,真的的原图地址 并没有破解
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

myzhaoww 发表于 2020-8-13 10:31
小白电脑即使按照了python,也没有bs4和lxml库;楼主不妨加上pip install lxml  bs4
yunkof 发表于 2020-6-5 17:56
迦南圣经 发表于 2020-6-5 17:59
月影银翔 发表于 2020-6-5 18:13
没办法下载4K,
独存 发表于 2020-6-5 19:40
感谢大佬分享
zzyyyy 发表于 2020-6-5 19:46
楼主学了多久py能写出这个的啊?
小嫩 发表于 2020-6-5 19:54
感谢大佬分享
unixcs 发表于 2020-6-5 20:12
感谢分享!!
AiniWang 发表于 2020-6-5 20:13
可以下载多少个,非会员
q9750 发表于 2020-6-5 20:20
学习一下,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表