吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5908|回复: 33
收起左侧

[Python 转载] python爬取汉服网站图片(改进版)

  [复制链接]
应真先生 发表于 2019-8-12 00:42
本帖最后由 应真先生 于 2019-8-12 18:53 编辑

看了@qq58452077老哥的帖子,觉得他写的这个保存的文件夹没有原网址的标题,正好为了练手,顺便重新写了个,引入了进程池
修改了一下老哥们反映的问题,缩进问题应该是我电脑上pycharm的锅,已经修改了一下,应该没问题了

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

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'
}
DETAIL_URLS_LIST = []
URL_END = 5 #抓取几页

def get_url():
    for i in range(1, URL_END+1):
        url = 'http://www.52guzhuang.com/forum-59-%d.html' % i
        yield url


def get_detail_url():
    urls = get_url()
    for url in urls:
        response = requests.get(url, headers=HEADERS).content.decode('gbk')
        html = etree.HTML(response)
        detail_url_list = html.xpath('//*[@id="threadlist"]/div[3]/div/div/div/div[3]/div[1]/a[2]/@href')
        for detail_url in detail_url_list:
            for i in range(1, 4):
                detail_urls = detail_url[0:-8] + str(i) + '-1.html'
                DETAIL_URLS_LIST.append(detail_urls)


def parse_url():
    try:
        for detail_url in DETAIL_URLS_LIST:
            response = requests.get(detail_url, headers=HEADERS)
            html = etree.HTML(response.content.decode('gbk'))
            imgs_title = html.xpath('//*[@id="thread_subject"]/text()')[0]
            img_title = re.sub('。,?\?,\.《》', ' ', imgs_title)
            img_urls = html.xpath(
                '//td[@class="plc"]/div[@class="pct"]//div[@align="center"]/ignore_js_op/img[@class="zoom"]/@zoomfile')
            yield img_title, img_urls
    except Exception as e:
        print(e)


def save_images(title, urls):
    for url in urls:
        try:
            image_url = 'http://www.52guzhuang.com/' + url
            image = requests.get(image_url, headers=HEADERS).content
            file_path = 'img' + os.path.sep + title
            if os.path.exists(file_path) is False:
                os.makedirs(file_path)
            img_path = file_path + os.path.sep + url[-25:]
            if os.path.exists(img_path) is True:
                print('已经下载' + img_path)
            if os.path.exists(img_path) is False:
                print('正在下载' + img_path)
                with open(img_path, 'wb') as f:
                    f.write(image)
        except Exception as e:
            print(e)


if __name__ == '__main__':
    pool = Pool()
    get_detail_url()
    for title, urls in parse_url():
        pool.apply_async(save_images(title, urls))
    pool.close()
    pool.join()
V58)DAMS{NSRYAP84`NJ~H1.png

免费评分

参与人数 5吾爱币 +6 热心值 +4 收起 理由
w夜魔 + 1 值得学习 嘿嘿
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qq58452077 + 1 + 1 我很赞同!
taobaogd + 1 建议楼主可以try一下,因为网站经常超时...
小兔子大板牙 + 1 + 1 谢谢@Thanks!

查看全部评分

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

 楼主| 应真先生 发表于 2019-8-12 17:04
indian806 发表于 2019-8-12 15:37
优秀,完美运行。不过我有个问题,为何每次复制的代码,我都需要手段删空格,然后tab格式,你们有方法么,a ...

是我的问题,因为我用的ide是pycharm,记得以前学习的时候好像说pycharm有哪里设置要更改一下缩进为四个空格,我更新了pycharm没有改那个设置导致的 问题
qq58452077 发表于 2019-8-12 11:42
感谢!!这个坛友改进是用xpath,pool,yield。。。 (图片下载详情页可能是有多页情况,创建文件夹时提取文字需要处理一下,可能有不合法字符创建文件出错)
原来写的是用WebCollector框架(这个框架现在可能不在更新,使用人不多)的Java版本。。。后面有时间发出来大家学习学习
夸克逃逸 发表于 2019-8-12 00:48
shuroot 发表于 2019-8-12 00:58

学习了,最近也在自学python爬虫
 楼主| 应真先生 发表于 2019-8-12 01:07
有一个问题,为什么我已经加载了多进程,下载速度还是这么慢?老哥们解答一下
小兔子大板牙 发表于 2019-8-12 06:03
Python 是个好东西感谢
孤独的老大哥 发表于 2019-8-12 06:43
一直学习一直爽
WIN32 发表于 2019-8-12 06:44
可以参考,下,谢谢
liand88 发表于 2019-8-12 07:58
学习了..感谢分享..
wang19940311 发表于 2019-8-12 08:29
感谢分享
zyy22664488 发表于 2019-8-12 08:33
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 17:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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