前几天利用RSSHub的konachan.net路由做了一个每日更新博客首页图的脚本,几天过去之后我发现日志文件居然是这样的:
mark
除了第一天的调试之外,完全没有获得到数据!!!
手动访问了几次rss连接,发现确实不能连接。看来这个RSS也不能用,干脆直接爬K站算了。

HTML分析

首先明确要爬取的url为http://konachan.net/post/popular_recent , 如果爬的是.com就要小心站点爆破。在浏览器中打开上面的连接,查看源。
先搜一下".jpg",结果有89个,但是这一页只有12张图片是我们要的,显然写正则表达式过于愚蠢。
使用BeautifulSoup解析之前要先分析代码。我们右击第一张图片检查,可以获得图片连接:

此页一共12张图片,我们发现<li>标签恰好也是12个,与图片一一对应。<div>标签包含了这张缩略图的信息,而<a>标签对应图片下的分辨率,超链接直接就是大图链接!!!

代码修改

获取链接

只需修改getpicurl()函数即可。

def getpicurl():
    urllist = []
    r = requests.get(url)
    soup = BeautifulSoup(r.content,'lxml')
    li = soup.body.find(id="content").div.div.ul.find_all("li")

    for i in range(len(li)):
        temp = li[i].find(class_="directlink largeimg")
        if temp == None:
            temp = li[i].find(class_="directlink smallimg")
        urllist.append(temp['href'])
    return urllist

这里有个坑,class_可能是"directlink smallimg"。

更新图片库

这里其实不需要修改,旧版本虽然会导致越更新总数越少,但每月手动添加几张也不是不能接受。
不过修改之后就可以保证图片库总数不变,不会因为新获得图片已经存在导致多删。

def updatepic(urllist):
    oldfiles = os.listdir(gallerypath)
    for i in urllist:
        r = requests.get(i)
        with open(gallerypath+r.headers['ETag'][1:-1]+".jpg", "wb") as code:
            code.write(r.content)
    newfiles = os.listdir(gallerypath)
    l = len(newfiles)-len(oldfiles)
    delpics(l,oldfiles)
    f = open(logpath, 'a', encoding='utf-8')
    f.write(time.asctime(time.localtime())+"     "+str(l)+"张图片已更新\n")

def delpics(n:int,files):
    d = random.sample(files,n)
    for i in d:
        os.remove(gallerypath+i)

修改完成后,添加服务即可。检查日志果然更新了12张图片。


挂科一时爽,一直挂科一直爽。
🀇🀇🀇🀈🀉🀊🀋🀌🀍🀎🀏🀏🀏 🀋