必应壁纸批量下载
最近发现 bing 的壁纸质量是真的好,小编就想将壁纸下载到本地,作为自己的桌面壁纸,然而需要一个一个点击下载,而且一页只有12张,还需要手动翻页才能继续下载壁纸。
然后就想到能不能用程序代替重复的机械操作
说来就来,上代码
import os
import re
import time
import urllib.request
import requests
def get_one_page(url):
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
response = requests.get(url, headers=headers)
if (response.status_code == 200):
return response.text
return None
def download(url, filename):
time.sleep(4) # 这里防止被墙,睡4秒,根据情况来定
filepath = 'E:\\必应壁纸\\' + filename + '.jpg'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
if os.path.exists(filepath):
return
with open(filepath, 'wb')as f:
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
f.write(response.read())
def parse(html):
if not html:
return None
pattern = re.compile('class="ctrl download" href="(.*?)".*?<h3>(.*?)</h3>')
items = re.findall(pattern, html)
for item in items:
try:
url = 'https://bing.ioliu.cn'+item[0]
imagename = item[1].strip()
rule = re.compile(r'[a-zA-z1-9()-/]')
imagename = rule.sub('', imagename)
download(url, imagename.strip())
print(imagename, "正在下载")
except Exception:
continue
if __name__ == '__main__':
start_page = int(input("起始页:"))
end_page = int(input("结束页:"))
for page in range(start_page, end_page):
url = 'https://bing.ioliu.cn/ranking?p=' + str(page)
print("正在抓取第", page, "页", url)
html = get_one_page(url)
parse(html)
睡眠时间尽量不要太小,太小会被 bing 检测并墙掉,被墙后只能等第二天了 哈哈(ps:不要问我怎么知道的)
最终数据会保存到 E:\必应壁纸\ 下
每每出现如下图,恭喜中奖,奖项 “再等一天” 或者挂代理吧