吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9968|回复: 11
收起左侧

[Python 转载] python3.7必应壁纸爬虫练手

  [复制链接]
cOldpure 发表于 2019-1-10 20:41

修复一个必应壁纸下载工具
资源站和之前同学一样, bing.ioliu.cn
打包好可以直接运行的版本在链接里
主要是练手 有机会再做更新了:)
python 打包还是不舒服唉  太大了
https://www.lanzouj.com/i2uccpg

import re
import os
import requests
from time import sleep

headers = {
    "User-Agent": ("Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) "
                   "Gecko/20100101 Firefox/64.0")
}

def get_index(resolution, index=1):
    url = f"https://bing.ioliu.cn/ranking?p={index}"
    res = requests.get(url, headers=headers)
    urls = re.findall('pic=(.*?)\\.jpg', res.text)
    _old_resolution = urls[1].split("_")[-1]
    return {url.split("/")[-1].replace(_old_resolution, resolution): url.replace(_old_resolution, resolution) + ".jpg"
            for url in urls}

def download_pic(pics):
    if os.path.exists('必应壁纸'):
        pass
    else:
        os.mkdir('必应壁纸')
        print('目录创建成功')
    try:
        for pic_name, pic_url in pics.items():
            res = requests.get(pic_url, headers=headers)
            with open(f"必应壁纸\\{pic_name}.jpg", mode="wb") as f:
                f.write(res.content)
            print(f"{pic_name} 下载完成")
    except Exception as e:
        print("下载出错", e)

def input_index():
    print("必应壁纸下载工具, 本工具未经资源站授权.")
    print("仅做学习和交流之用, 随时有可能停止维护.")
    print("目前资源站收容页数为87,当前仅提供1920x1080分辨率下载")
    while True:
        sleep(0.1)
        index = input("请输入要下载的页数(Max=87):")
        try:
            if index == "Q":
                exit()
            index = 87 if int(index) > 87 else int(index)
            return index
        except ValueError:
            print("请输入数字, 或输入Q退出!")

def main():
    index = input_index()
    i = 1
    while i <= index:
        print(f"当前第{i}页,共需要下载{index}页")
        pics = get_index("1920x1080", i)
        download_pic(pics)
        i += 1
    print("下载完成,将在3秒后关闭...")
    sleep(1)
    print("2")
    sleep(1)
    print("1")
    sleep(1)
    print("0")

if __name__ == '__main__':
    main()

免费评分

参与人数 5吾爱币 +7 热心值 +5 收起 理由
是非是谁 + 1 + 1 谢谢@Thanks!
天空宫阙 + 1 + 1 谢谢@Thanks!
xihua + 1 + 1 谢谢@Thanks!
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
joneqm + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

 楼主| cOldpure 发表于 2019-1-10 22:59
会飞的鱼哟 发表于 2019-1-10 22:45
我之前也写过一个,后来不维护了,有两点没解决,一是反爬虫机制,还有一个是断点续传。反爬虫就要用到代{ ...

反爬机制的话我没遇见, 具体要看怎么回事
如果只是IP反爬的话  每天一张就不会有这个情况
第一次全站爬的话可以用一下隧道或者拨号 之后是不用的
图片是否存在 和每天一张的话我觉得也有办法
简单的打个比方说,每次启动程序,读取最后一次爬取那个页面的所有链接列表,这个应该是一个简单的数据文件存储的, 非常小
然后not in  然后 get 就行了
如果直接爬bing.com 就不用做这个了 - - | 因为bing基本不会重复 每天只有一张
只有在每天的特点时间运行一下程序就行了
会飞的鱼哟 发表于 2019-1-10 22:45
我之前也写过一个,后来不维护了,有两点没解决,一是反爬虫机制,还有一个是断点续传。反爬虫就要用到代{过}{滤}理库,这个要用免费的那些代{过}{滤}理来维护就很困难,更新太快。断点续传其实具体的说是检测这张图片是否已经存在,存在就不下了,这有个难点,就是我扔服务器上的话,怎么写他下载完后所有图片后再切换成每天只下一张的模式(因为这网站每天只更新一张),而如果我服务器关了一星期,他要先把我之前没下的先下完再切换成每天只下一张的模式。
hf2008paopao 发表于 2019-1-10 21:54
赶紧学会python    明天耳机回来就能好好听课咯
小涛破解 发表于 2019-1-10 22:12
请问怎么抓取到链接得,求方法
 楼主| cOldpure 发表于 2019-1-10 22:30
小涛破解 发表于 2019-1-10 22:12
请问怎么抓取到链接得,求方法

图片链接的话,请求页面的时候返回了整个html页面
正则匹配一下整个页面的text字符串就出来了  以pic=开头 .jpg结尾即可
出来之后做一下处理 我记的默认给你的是pic=http://h1.ioliu.cn/bing/ZoomOut_ZH-CN4471982075_1366x768.jpg这样  替换1366x766成1920x1080就行了,这个代码里有的看一下
lymesh 发表于 2019-1-10 22:47
厉害拉,学习学习
wangqiustc 发表于 2019-1-10 23:35
厉害了,爬虫
风之暇想 发表于 2019-1-31 15:08
可惜文件名没能自动命名为介绍名
nikeleeee 发表于 2019-9-13 15:36
好想收集必应壁纸全集。每天的壁纸设置随机一分钟。都是必应的壁纸
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 02:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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