吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 21512|回复: 107
上一主题 下一主题
收起左侧

[Python 转载] Python 为所欲为的小虫子, [福利] 爬图源码,更新代码

  [复制链接]
跳转到指定楼层
楼主
小心boss 发表于 2019-12-1 15:05 回帖奖励
本帖最后由 小心boss 于 2019-12-1 15:19 编辑

新手老司机开路...
之前有人说爬的速度慢, 网站中断连接后需要重下~
现在这些问题都没了.当然自己加个代{过}{滤}理访问会更好~
我只测试下了几个图贴...
代码仅限用于测试,不要干坏事啊
#####
希望大家能给点热心鼓励一下~~~谢谢啦.

上代码:  
[Python] 纯文本查看 复制代码
# -*- coding=utf-8 -*-
'''
人生苦短,我用Python
'''
###以此怀念###
import re
import os
import time
import lxml
import random
import requests
import multiprocessing
from bs4 import BeautifulSoup


###################### 全局变量 ##############################
url = 'https://www.mzitu.com/all'  # 需要爬取的网页地址
ua = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0',
      'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1',
      'Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50',
      'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
      'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)'
      ]
Usera = random.choice(ua) #随机一个ua
headers = {'User-Agent':Usera,
           'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
           'Accept-Encoding': 'gzip',
           "Referer": "https://www.mzitu.com/all"}  # 创建头部信息
##############################################################

def get(url):  # 发送网络请求
    a = requests.get(url, headers=headers)
    html = a.text
    return html


def main():
    soup = BeautifulSoup(get(url), 'lxml')  # 解析爬取网址
    all_url = soup.find('div', class_='all').find_all('a')  # 过滤数据到all_url列表中
    for mulu in all_url:  # 遍历url列表
        if mulu.get_text() == '早期图片':
            continue
        else:
            dict_mulu = {
                'title': mulu.get_text(),
                'link': mulu.get('href'),
                'ID': re.findall('\d+', mulu.get('href'))
            }  # 过滤出字典

        mulu_id = dict_mulu['ID']   #读字典ID开始过滤已下载内容
        with open('已下载列表.txt','a+') as file:
            file.seek(0)
            txt = file.read().splitlines()
            aa = list(txt)
            wancheng = [True for a in mulu_id if a not in aa]
            if wancheng:
                mulu_url = dict_mulu['link']
                print('开始下载当前图帖链接:', mulu_url)
                soup2 = BeautifulSoup(get(mulu_url), 'lxml')  # 解析字典中的目录地址
                img_mulu = soup2.find("div", {"class": "main-image"}).find("img")['src']  # 匹配图片地址
                page = soup2.find_all("span")[9]  # 取图贴页数
                max_page = page.get_text()
                os.chdir(img_dir)
                new_dir(dict_mulu['title'])
                imgs = []
                for j in range(1, int(max_page) + 1):
                    pages = str(j).zfill(2)
                    img_url = img_mulu[0:-6]+pages+'.jpg'   # 图片链接
                    # 图片名
                    img_name = dict_mulu['title'] + str(j)
                    img = (img_name, img_url)
                    imgs.append(img)
                cores = multiprocessing.cpu_count()
                p = multiprocessing.Pool(processes=cores)
                p.map(down, imgs)
                p.close()
                p.join()
                get_end(str(dict_mulu['ID']))
            else:
                print(str(dict_mulu['ID'])+'正在跳过已下载内容....')

def down(imgs):
    name = imgs[0]
    image = imgs[1]
    f = open(name + '.jpg', 'wb+')
    img = requests.get(image, headers=headers)
    if str(img) == '<Response [200]>':
        print('下载图片...',name,image)
        f.write(img.content)
    f.close()


def new_dir(name):  # 创建文件夹
    if os.path.exists(name):
        print('"%s"  文件夹已存在'%name)
        os.chdir(name)
    else:
        print('创建文件夹: {}'.format(name))
        os.mkdir(name)
        os.chdir(name)

def get_end(id):        #写出已下载列表
    os.chdir(img_dir)
    ftxt = open('已下载列表.txt', 'a+')
    txt = id.strip("[']")
    ftxt.write(txt+'\n')
    ftxt.close()


if __name__ == '__main__':
    print("####################################################################")
    print("# 开始执行脚本...                                                   #")
    print("# 支持断点续传,重新执行脚本即可...                                   #")
    print("#                                              以此怀念  2019.11.30 #")
    print("####################################################################")
    img_dir = 'D:\学习资料'  # 设定存储爬取图片的路径
    new_dir(img_dir)
    yanshi = 0.3  # 设定抓取图片延时(0.3秒)
    main()

############################## End 2019.11.30 ######################################

免费评分

参与人数 22吾爱币 +15 热心值 +19 收起 理由
syy + 1 + 1 谢谢@Thanks!
kronos0 + 1 + 1 热心回复!
x66 + 1 + 1 楼主细节做得漂亮
shi128862 + 1 + 1 用心讨论,共获提升!
柯西 + 1 我很赞同!
holywk + 1 + 1 实测有用
少年Πの漂流 + 1 热心回复!
mh_17041740252 + 1 + 1 热心回复!
迷路的小和尚 + 1 热心回复!
moxiaoyu + 1 用心讨论,共获提升!
奔跑的蜗牛2020 + 1 谢谢@Thanks!
Tik.Tok + 1 谢谢@Thanks!
zlp686868 + 1 热心回复!
李雷雷霆 + 1 + 1 真的一滴都没有了
zhaoziqi1995 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Futuresing + 1 + 1 谢谢@Thanks!
通途 + 1 + 1 用心讨论,共获提升!
大脑是否还在 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
cczzxx6 + 1 + 1 热心回复!
zjjyl + 1 + 1 谢谢@Thanks!
cherrypi + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
abc265 + 1 看看

查看全部评分

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

推荐
cljkk 发表于 2020-3-27 15:40
Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/123.py", line 119, in <module>
    main()
  File "C:/Users/Administrator/Desktop/123.py", line 39, in main
    all_url = soup.find('div', class_='all').find_all('a')  # 过滤数据到all_url列表中
AttributeError: 'NoneType' object has no attribute 'find_all'

Process finished with exit code 1

请问楼主大人,这个main()是什么意思哦,,感谢,pycharm调试
推荐
fzp2077 发表于 2019-12-1 15:18
3#
shun丶sir 发表于 2019-12-1 15:12
4#
alicc 发表于 2019-12-1 15:16

嚣张。          
5#
6688123 发表于 2019-12-1 15:19
坐等楼主的代码,嘿嘿。
6#
anubiz 发表于 2019-12-1 15:20
感谢分享!!!!!试试
7#
cherrypi 发表于 2019-12-1 15:22
谢谢分享,有你更精彩。
8#
sgh2zlx 发表于 2019-12-1 15:30
好   学习一下                     
9#
七尺大豆腐 发表于 2019-12-1 15:42
不会使用,先收藏,感谢
10#
IWayne 发表于 2019-12-1 15:47
支持下楼主的东西
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 14:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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