吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1480|回复: 13
收起左侧

[学习记录] 爬取桌面壁纸()

[复制链接]
Xiexian 发表于 2023-2-6 18:27
新人贴哈!刚刚学完如何爬取图片。
前言
1、本人作为一名初学者,爬取网页仅做学习
2、代码仅供参考,多有不足望指教
3、可自行更换爬取始末页以及某页中图片的爬取始页,代码中有注释
4、需要在项目路径下自己创建爬取图片保存路径,如代码所示
代码还有很多不足,请大佬们宽容见谅哈.

[Python] 纯文本查看 复制代码
import requests
from lxml import etree
import re
import json
from concurrent.futures import ThreadPoolExecutor

domain = "https://desk.zol.com.cn"


def get_detail_href(url):
    """
    该函数负责获取到每一个详情页的href的值
    """
    resp = requests.get(url)
    resp.encoding = "gbk"
    et = etree.HTML(resp.text)
    # 获取详情页的地址
    hrefs = et.xpath("//ul[@class='pic-list2  clearfix']/li/a/@href")   # 这里有点问题所以无法执行
    # 处理一下href. 需要添加域名
    new_hrefs = []
    # 去掉最前面得两个li
    del hrefs[0:2]     # 不算后面哪个
#     del hrefs[0]      删除一个后会形成一个新得列表
#     del hrefs[0]
    for href in hrefs:
        new_hrefs.append(domain + href)
        print(href)



    return new_hrefs


def get_img_srcs(href):
    """
    访问每一个详情页. 得到每个详情页背后对应的一组图片的下载路径
    """
    resp = requests.get(href)
    resp.encoding = "gbk"
    obj = re.compile(r"var deskPicArr.*?=(?P<desk_str>.*?);", re.S)
    # 提取页面中关于图片路径的信息
    result = obj.search(resp.text).group("desk_str")
    desk_dict = json.loads(result)  # 把页面中提取到的字符串处理成字典
    img_src_list = []
    for item in desk_dict['list']:
        ori = item.get("oriSize")
        img_src = item.get("imgsrc")
        img_src = img_src.replace("##SIZE##", ori)
        img_src_list.append(img_src)
    return img_src_list


def download_img(img_src):
    """
    下载图片
    :param img_src:  xxxx
    """
    name = img_src.split("/")[-1]
    print(f"开始下载{name}")
    resp = requests.get(img_src)
    with open(f"new/{name}", mode="wb") as f:
        f.write(resp.content)
    print(f"{name}下载完毕!")


def main():
    for i in range(1, 10):
        url = "https://desk.zol.com.cn/pc/"
        if i !=1 :
            url = url + f"{i}.html"
        print(url)


        print("抓取到首页中每个详情页的href......")
        hrefs = get_detail_href(url)
        
        print("抓取到首页中每个详情页的href......搞定!")

        print("访问每一个详情页. 得到每个详情页背后对应的一组图片的下载路径")
        img_list = []  # 装着所有的图片下载地址
        for href in hrefs:
            # 2. 访问每一个详情页. 得到每个详情页背后对应的一组图片的下载路径
            img_src_list = get_img_srcs(href)
            for img in img_src_list:
                img_list.append(img)
        print("访问每一个详情页. 得到每个详情页背后对应的一组图片的下载路径....搞定!!!")

        # 3. 开始下载图片
        with ThreadPoolExecutor(20) as t:
            for img in img_list:  # img: 图片下载路径
                t.submit(download_img, img)

        print("all over!!!")


if __name__ == '__main__':
    main()
1675679226207.jpg

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
obitosec + 1 + 1 谢谢@Thanks!
ccwuax + 1 + 1 我很赞同!
baishushe1234 + 1 + 1 用心讨论,共获提升!

查看全部评分

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

zhcj66 发表于 2023-2-6 21:01
感谢分享,小女生很喜欢
kaishia 发表于 2023-2-6 21:24
leoxxxiyu 发表于 2023-2-6 21:34
lcsj52 发表于 2023-2-6 21:35
哈哈哈点进来之前我还以为真的是获取桌面壁纸
BOSS123 发表于 2023-2-6 21:46

感谢分享,学到了
Mimikko 发表于 2023-2-6 22:39
66666,解我燃眉之急
waweiggfnh 发表于 2023-2-7 08:37
女孩子们最喜欢这种卡通的啦
 楼主| Xiexian 发表于 2023-2-7 08:51
没想到第一次发学习贴这么多人看,我还以为我这种小白没人看嘞,谢谢大家!
XiaoZouYu 发表于 2023-2-7 10:01
哈哈哈,女朋友可喜欢了。感谢楼主
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 02:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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