xpath+Python爬取octodex.github所有的章鱼猫图片

啊啊啊!!!好可爱啊!用做头像、朋友圈背景还是挺不错的。
此处的图片经过压缩:

章鱼猫宝宝好可爱捏.

一张一张下载太麻烦了!直接用爬虫爬,在网上找到了两套源码,不过均已失效,而且只能爬取主页155张展示图,代码并不完整,而且只能下载到png格式的,实际上还有jpg和gif动图的,所以改人家代码的成本还不如自己写了呢。
先看效果:

代码运行结果:

接下来是代码:

# coding: UTF-8
"""
@IDE     :PyCharm
@Author  :娄南湘先生
@Date    :2023/12/9,0010 11:39
"""

import os
import requests
from lxml import etree
import time

# 创建一个octocat文件来保存图片
folder_name = 'octocat'
os.makedirs(folder_name, exist_ok=True)

# 站点URL
base_url = 'https://octodex.github.com'

# 获取网页内容
response = requests.get(base_url, verify=False)
html = response.text

# 解析HTML
tree = etree.HTML(html)
# 让子弹飞一会儿
time.sleep(3)

# 后半部分的链接xpath
id_links = tree.xpath('//html[1]/body[1]/main[1]/div[1]/div/div/div/h2//@href')

# 计数器
count = 1

# 遍历每个展示图像下的子链接
for baseId in id_links:
    base2_url = base_url + baseId
    # 获取每个当前主图像下面的子链接
    response2 = requests.get(base2_url)
    html2 = response2.text
    tree2 = etree.HTML(html2)
    # 所有图片的获取xpath
    img_links = tree2.xpath('//html/body/main/div/div/img/@src')

    # 遍历每个图片链接和下载
    for img_link in img_links:
        img_url = base_url + img_link
        # 图片名中含有不合法的字符/需要去掉
        gif_png_name = img_link.split('/')[-1]
        image_path = os.path.join(folder_name, gif_png_name)
        print(f"正在下载第 {count} 张,图片: '{gif_png_name}'")
        response = requests.get(img_url)
        with open(image_path, 'wb') as f:
            f.write(response.content)
        count += 1

print("下载完成!")

 

这里记录一个遇到的问题:
选择用xpath语句定位图片地址,因为猫猫们都有自己的名字,所以直接定位到相对应的样式id就好了。

一开始我这么想的,后面实现的时候发现有很多可爱的猫猫没有被下载,因为它们后面接的链接不是id,比如:

所以这里我只下载到了164张,后面选择定位到href得以解决。

所用的工具xpath在edge插件扩展中下载:

如果你不想运行代码,图片也全部打包在这里:(上传日期:2023年12月10日)
链接:https://pan.baidu.com/s/1Rr9XLcFkrAzNDngDi5NZRQ?pwd=1234
提取码:1234
想要我的ide背景?也在上面的压缩包中

声明:
Octocat形象版权为Github所有,请勿将其作为商业用途,此处代码仅作学习研究使用,如有侵权行为与本人无关!

—-原创文章!转载标明出处!