为了解决期末大作业,准备开始学爬虫,不知道如何下手。于是花了一上午看课本,用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上有备份:传送门
Comments | NOTHING