吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8776|回复: 18
上一主题 下一主题
收起左侧

[Python 转载] python爬取2717.com图片

[复制链接]
跳转到指定楼层
楼主
cnbrave 发表于 2019-10-22 14:02 回帖奖励
本帖最后由 cnbrave 于 2019-10-23 10:57 编辑

[Python] 纯文本查看 复制代码
from lxml import etree
import requests
import os
import time
from multiprocessing import Pool
import random
import shutil

def reqq(html):
    a = requests.get(html, timeout=30)
    return a

def downn(image):
    # with open(image[-15:], 'wb+') as f:
    with open(os.path.basename(image), 'wb+') as f:
        im = reqq(image)
        f.write(im.content)
    return 0
def mkdir(name):
    path = name.strip() #去除首位空格
    path = path.rstrip("\\") #去除尾部\符号
    if os.path.exists(path):
        # print(name + '目录已存在')
        os.chdir(path)
        pass
    else:
        print('目录不存在,新建目录{}'.format(path))
        os.mkdir(path)
        os.chdir(path)

def datedown_log(item_nv):
    # 数据下载结果写入datadown_log.txt文件
    f = open('E:\\2717.com\\datadown_log.txt', 'a')
    content_wm = "{}'\r\n".format(item_nv)
    f.write(content_wm)
    f.close()
def removeDir(dirPath):
    # 删除文件夹
    if (os.path.exists(dirPath)):
        shutil.rmtree(dirPath)
def timeSleep(sleepTime):
    #sleepTime = random.randint(1, 5)
    print("休息:" + str(sleepTime) + " 秒。")
    iii = 0
    while iii < sleepTime:
        print("倒计时:" + str(sleepTime - iii - 1) + " 秒。")
        time.sleep(1)
        iii += 1

imagesUrl = [] #图片集合
def getNextPic(url):
    # https://www.2717.com/ent/meinvtupian/2019/316129_58.html
    htmlFileName = os.path.basename(url)
    htmlNext = url.replace(htmlFileName, "")
    l = reqq(url)
    q = etree.HTML(l.content)
    ima = q.xpath('//*[@id="picBody"]/p/a/img/@src')[0]  # 一页一图
    imagesUrl.append(ima)
    nextUrl = q.xpath('//*[@id="nl"]/a/@href')[0]
    print("正在疯狂爬取,图片地址!-->{}、{}".format(len(imagesUrl), ima))
    if len(imagesUrl) % 10 == 0:
        timeSleep(random.randint(0, 3))
    if nextUrl != "##":
        htmlNextPic = htmlNext + nextUrl
        getNextPic(htmlNextPic)
    else:
        #print(imagesUrl)
        return imagesUrl
if __name__ == '__main__':
    downImgNum = 0 # 下载图片数量
    for k in range(1, 237):
        images = []
        removeDir = []
        # https://www.2717.com/ent/meinvtupian/list_11_1.html
        html = 'http://www.2717.com/ent/meinvtupian/list_11_{}.html'.format(str(k))
        req = requests.get(html)
        a = etree.parse(html, etree.HTMLParser())
        re = a.xpath('//*[@class="MeinvTuPianBox"]/ul/li/a[1]/@href')
        #print(re)
        #print(len(re))
        mkdirName = a.xpath('//*[@class="MeinvTuPianBox"]/ul/li/a[2]/text()')
        #print(mkdirName)
        #print(len(mkdirName))
        #break
        try:
            i = 0
            for path in mkdirName:
                mkdir('E:/2717.com/'+path+'/')
                os.chdir('E:/2717.com/'+path+'/')
                try:
                    j = re[i]
                    getNextPic('http://www.2717.com/' + j)
                    print("正在下载。。。" + path + "第 " + str(k) + " 页" + ",第 " + str(i+1) + " 条")
                    imgIndex = 1 # 第几张图片
                    imaIndex = 1 # 当前第几张图
                    for downImg in imagesUrl:
                        #b = os.path.isfile((os.path.basename(downImg)))
                        # print('E:/mm530.net/' + path + '/' + os.path.basename(downImg))
                        #print(b)
                        if(os.path.exists('E:/2717.com/'+path+'/'+ os.path.basename(downImg))):
                            print("图片已经下载过,{},第{}/{}张图片-->{}".format(path, str(imaIndex), str(len(imagesUrl)), downImg))
                            imaIndex += 1  # 当前第几张图
                            continue
                        else:
                            print("现在下载,{},第{}/{}张图片-->{}".format(path, str(imgIndex), str(len(imagesUrl)), downImg))
                            if imgIndex % 10 == 0:
                                timeSleep(random.randint(1, 3))
                            downn(downImg)
                            imgIndex += 1
                            # print("----------下载完成----------")
                            downImgNum += 1
                            print("==========>>>共下载{}张图片!现在下载,第{}页 第{}/30条!<<<==========".format(downImgNum, str(k), str(i+1)))
                    imagesUrl.clear()  # 图片集合清空
                except Exception as err:
                    print(err)
                    print("下载出错。。。" + path + "第 " + str(k) + " 页" + ",第 " + str(i + 1) + " 条")
                    datedown_log(err)
                    removeDir.append('E:/2717.com/'+path+'/')
                finally:
                    i += 1
                    timeSleep(random.randint(1, 5))
                    imagesUrl.clear()  # 图片集合清空
        except Exception as err2:
            print('第{}页,第{}条。error'.format(str(k), str(i)))
            print(err2)
            datedown_log(err2)
        # 下载一页休息
        timeSleep(random.randint(1, 30))
        # 删除空目录
        #if(len(removeDir) > 0):
            #removeDir(removeDir[0])
            #removeDir.remove(removeDir[0])


附上代码文件。

27270.com.rar

1.88 KB, 下载次数: 42, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
shangpengpeng + 1 + 1 谢谢@Thanks!

查看全部评分

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

推荐
 楼主| cnbrave 发表于 2019-10-22 14:26 |楼主
xuejiqiao 发表于 2019-10-22 14:23
楼主,你下载的python是那个版本的啊,我的是win10 64位的

Python 3.6.5、PyCharm Community Edition 2018.2.2
推荐
 楼主| cnbrave 发表于 2019-10-23 10:55 |楼主
Dactor 发表于 2019-10-22 20:49
在window上运行显示这个,运行不了,是我的设置有问题吗?

我打包上传这个文件,你再试下。
沙发
北上飞 发表于 2019-10-22 14:10
3#
xujian 发表于 2019-10-22 14:16
可以可以感谢大佬分享
4#
ly765893958 发表于 2019-10-22 14:16
大佬 谢谢分享
5#
checklin 发表于 2019-10-22 14:23
大佬 谢谢分享
6#
xuejiqiao 发表于 2019-10-22 14:23
楼主,你下载的python是那个版本的啊,我的是win10 64位的
7#
maxiuyuzxc 发表于 2019-10-22 14:26
感谢分享
9#
Danger_Robot 发表于 2019-10-22 14:39
只因写了一段爬虫,公司 200 多人被抓!
10#
flzt_aox 发表于 2019-10-22 14:46
能爬取千图的PSD格式的图片吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-16 15:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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