使用python爬高清壁纸,附带壁纸的说明信息
代码在此from requests_html import HTMLSession
import requests
import os
# 需要python3.6 貌似requests-html需要3.6
session = HTMLSession()
WORKDIR = 'D:\\bing_wallpaper'
def download(one_pic_url):
p = session.get(one_pic_url)
p.html.encoding = 'utf-8'
# 图片标题 作者
p_title = p.html.find('div.description', first=True).find('p.title', first=True).text
# 图片副标题 说明
p_sub = p.html.find('div.description', first=True).find('p.sub', first=True).text
# 图片下载地址
p_download_url = base_url + list(p.html.find('div.options', first=True).find('a.download').links)
print("开始下载 {} ..".format(p_title))
# 标题里包含 "/" 导致os.mkdir 报错 暂时还不知道咋解决 所以暂时替换成空格了
pic_dir = "{}\\{}".format(WORKDIR, p_title.replace("/"," "))
if not os.path.exists(pic_dir):
os.mkdir(pic_dir)
readme = "{}\\readme.txt".format(pic_dir)
with open(readme, 'a+') as f:
f.write(p_sub)
pic = requests.get(p_download_url, stream=True)
pic_file = "{}\\pic.jpg".format(pic_dir)
if pic.status_code == 200:
with open(pic_file, 'wb') as p:
p.write(pic.content)
print("完成下载 {}".format(p_title))
if __name__ == '__main__':
if not os.path.exists(WORKDIR):
os.mkdir(WORKDIR)
base_url = "https://bing.ioliu.cn"
sum = 2
for num in range(1, sum):
if num:
url = "{0}/?p={1}".format(base_url, num)
r = session.get(url)
r.html.encoding = 'utf-8'
# 获取当前页面下所有图片的连接
pic_lst = r.html.find('a.mark')
for pic_url in pic_lst:
pic_uri = list(pic_url.links)
# 组合出完整的图片下载地址
one_pic_url = "{0}{1}".format(base_url,pic_uri)
download(one_pic_url)
效果图也上几张
夏橙M兮 发表于 2018-3-16 21:20
楼主,运行失败了,求分析。
python目录下运行下 pip install requests_html 感谢楼主分享,正在学习Python,自己撸一个试试:lol 不错,以后就用它当壁纸了 谢谢楼主 传统壁纸真有点看腻了 # 标题里包含 "/" 导致os.mkdir 报错 暂时还不知道咋解决 所以暂时替换成空格了
在windows中,文件名是不能包含斜杠和反斜杠的,所以会报错,把斜杠替换成非“ / \ : ? “ < > | ”都行,双引号里的都不能用在文件名里。 666学习下 多谢楼主了哈 zdnyp 发表于 2018-3-16 16:11
# 标题里包含 "/" 导致os.mkdir 报错 暂时还不知道咋解决 所以暂时替换成空格了
在windows中,文件名是不 ...
嗯 我理解了 因为系统的路径就是类似 c:\123\abc 所以如果目录名包含 /或者\ 会被当成是单独的目录 强大的python~~ fxzdsb 发表于 2018-3-16 16:16
嗯 我理解了 因为系统的路径就是类似 c:\123\abc 所以如果目录名包含 /或者\ 会被当成是单独的目录
{:1_921:}我也在学Python,scrapy 感谢楼主分享源码,学习了,正好需要,也感谢3楼@zdnyp 的提醒,学习了