为了解决期末大作业,准备开始学爬虫,不知道如何下手。于是花了一上午看课本,用25行写了个爬取必应每日壁纸的小爬虫(逃)

虽然没有什么用,但是对于刚刚学爬虫我来说,不亚于输出第一次“hello world”带来的成就感。

源码

import requests
from bs4 import BeautifulSoup
def get_html(url):            #固定的网页源码获取函数

    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        r="fail"
        return r
if __name__=="__main__":
    url=input("请输入url")             #在这里输入bing网址
    html=get_html(url)                #调用上面的函数
    soup=BeautifulSoup(html,'html.parser')        #使用beautifulsoup库解析html源码,利用python内置的html.parser库
    img=soup.find("div",attrs={"class":"img_cont"})    #分析bing源码,找到预加载图片的标签位置
    pu = img.get("style")       #style标签后有链接,进一步缩小位置
    u=pu[22:-14]
    img_resp = requests.get(u)          #请求链接,获取图片
    img_name = u.split("/")[-1]
    #img_name = "today.jpg"    #(windows系统请替换为这个)
    with open(img_name,"wb") as f:
        f.write(img_resp.content)    #将图片内容写入文件
    print("恭喜,bing今日图片爬取成功!图片储存在项目根目录中")

Tips

本程序使用了两个第三方库,一个是requests,用于访问Bing的URL,获得html代码;另一个是beautifulsoup4,用于解析html的各个标签,从中找到每日图片的url。如果想要测试这个程序,请安装这两个库。关于代码的含义,都已经写在注释里了。

问题

首先是本程序下载的图片清晰度只有1920*1080,而经过测试原图似乎无法这样爬取。

其次,在我的Mac上,这些代码只用一次就跑通了,但是在同学的Windows机上,img_name = u.split("/")[-1] 出现了一个错误。原因大概是Windows文件系统的命名问题,换成img_name = "today.jpg"可以解决,但是图片名称不能自动变化了。

项目地址

除了此处,源码也在gitee上有备份:传送门


“好久不见,Handler One”