吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25210|回复: 48
收起左侧

[Python 转载] 【分享】套图爬虫,以美图录为例

  [复制链接]
windBlows 发表于 2018-6-20 10:52
本帖最后由 windBlows 于 2018-6-21 22:09 编辑

[Python] 纯文本查看 复制代码
## 此模板主要用于多线程套图下载,不过一般大众爬虫不用破译的都可以改改使用,附件有个美图录的例子
## 参考了很多资料,最主要是 https://blog.csdn.net/baidu_35085676/article/details/68958267 和 https://cuiqingcai.com/3179.html 这两个写的也都比较详细
## 每个用途 每个网址 细节都会有差异 所有带(*)的都属于DIY范畴,需要一些基本的html知识
## 请灵活使用


import requests ##参考http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
from bs4 import BeautifulSoup ##参考http://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id55
import os ##本地写入数据
import urllib.request ##有时直接打开图片地址会显示403 Forbidden,只有先打开相关网页再打开图片才能正常显示,所以我就先打开一下网页,可省略
import re ##正则表达式,用于匹配格式
from multiprocessing import Pool ##多线程


headers = {'User-Agent':"Mozilla/5.0", "Referer": "图库主页"} ##浏览器请求头,有时python直接获取图片时防盗链会踢出,所以我们假装是在用浏览器

def run(url): ##(*)传入图片某分类网页的url

    start_html = requests.get(url,  headers=headers) ##request该url的html文件
    Soup = BeautifulSoup(start_html.text, 'lxml') ##使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
    all_a = Soup.find('div', class_='主体的class名称').find_all('a') ##(*)查找该网页上主体的所有图片

    path = url.split('/')[-2] ##(*)网址的最后一个/之前一般是这一类的总称,可作为文件夹名
    if not os.path.exists("存储总目录" + "/" + path): ##如果没有这个文件夹的话,创造并进入
        os.makedirs("存储总目录" + "/" + path) ##创建一个存放的文件夹
        os.chdir("存储总目录" + "/" + path) ##切换到上面创建的文件夹

    for a in all_a:

        href = a["href"] ##(*) 获取套图网页的url,可省略
        elem = a.img['src'] ##(*) 获取本图片地址
        folder = elem.split('/')[-2] ##(*) 获取该套图的名称

        length = a.next_sibling.next_sibling.get_text()
        max_span = int(length[-17:-14])  ##(*) 找到该套图的网页一共有多少页

        html = requests.get(href, headers=headers, allow_redirects=False) ##访问套图网页,并阻止重定向(也是防盗链的一种)
        u = urllib.request.urlopen(href) ##真的打开这个网页,可省略

        for page in range(1, max_span + 1):

            page_url = elem[:-5] + str(page) + ".jpg" ##(*) 图片地址格式,需要自己探索
            print(page_url) ##(*) 打印一下图片地址,可省略

            img_html = requests.get(page_url, headers=headers, allow_redirects=False) ##访问图片地址
            name = folder + '-' + str(page) ##(*) 图片名格式,套图名称+第几张图

            f = open(name+'.jpg', 'ab') ##写入这个图片
            f.write(img_html.content) ##多媒体文件要用.content写
            f.close()


urls = {'url1', 'url2','url3'} ##这就是各分类的url

pool = Pool(30) ##线程数
for url in urls:
    pool.apply_async(run, args=(url))

pool.close()
pool.join()
print('所有图片已下完')


0.1改版:
修复了一些bug;
添加了断点续传功能;
文件夹名称改为套图地址;

0.2改版:
修复了一些文件夹命名问题,以及一些数量获取问题


效果图

效果图

Meitulu0.2.py.zip

1.92 KB, 下载次数: 890, 下载积分: 吾爱币 -1 CB

用于美图录,分类的url要自己填写

免费评分

参与人数 10吾爱币 +9 热心值 +9 收起 理由
caile79 + 1 + 1 谢谢@Thanks!
饿死的猫 + 1 + 1 感谢楼主,正在下载
我是巴西 + 1 + 1 额,以前有过一个版本,今天用失效了,来的好及时
水泥工艺学 + 1 + 1 谢谢@Thanks!
lanni654321 + 1 谢谢@Thanks!
、林缺 + 1 + 1 打不开
万物皆空 + 1 谢谢@Thanks!
执念i_ + 1 + 1 热心回复!
txt + 1 + 1 用心讨论,共获提升!
justedu + 1 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| windBlows 发表于 2018-6-21 22:18
庄家 发表于 2018-6-21 22:01
精易出了啊,比你早!

哇塞我写之前没发现诶~谢谢提醒!但首先我这个版本是多线程的,而且这篇主要是教程而不是文件本身~不过谢谢!另外附上精易版链接:https://bbs.125.la/forum.php?mod=viewthread&tid=14085271&highlight=%C3%C0%CD%BC%C2%BC,欢迎大家参考
 楼主| windBlows 发表于 2018-6-21 21:56

解压后在python编译器里面改一下文件夹名称(改为你想存储到的地方)然后运行即可,也可以用terminal/command line运行
protea_ban 发表于 2018-6-20 11:16
我才不是狮子喵 发表于 2018-6-20 11:22
感谢分享,楼主辛苦了
gorkys 发表于 2018-6-20 11:46
感谢分享,楼主辛苦了
a_lee2 发表于 2018-6-20 12:19
楼主辛苦。不应该上下美图?,哈哈
kingjia 发表于 2018-6-20 12:53
学习了  谢谢分享经验
mayon 发表于 2018-6-20 13:12
学习了  谢谢楼主分享经验
20175101019 发表于 2018-6-20 18:40
我想问下楼主用的是什么编译器????
BE一诺 发表于 2018-6-21 00:54
收下学习,感谢LZ分享
 楼主| windBlows 发表于 2018-6-21 02:07
20175101019 发表于 2018-6-20 18:40
我想问下楼主用的是什么编译器????

pyzo,下载网址http://www.pyzo.org,不过大部分编译器都可以吧
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-1 07:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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