给爷爬,用劲爬@@@

Konachan简介

  • 国外的ACG图片分享网站
  • 图片较优质
  • 分辨率高

简单的来说,适合做壁纸

思路分析

这个网站提供了randomlatest两种排序方法的网页,据我肉眼观察,按照latest的排序方法得到的照片更好,继续研究latest这个网址。

  1. 分页

    网站分成若干页,通过地址栏的page参数控制

  2. 图片

    • 缩略图:缩略图都被使用了style="width: 170px;"以及都属于li中,同时提供了图片的ID
    • 通过在html中查询ID,发现图片真实链接存在于这个两个类型中class_="directlink largeimg"class_="directlink largeimg"

那么我们只需要遍历所有的页面,把图片分别保存下来就好了。

代码

按照上面的逻辑,完成代码即可

Code

from bs4 import BeautifulSoup
import time
import os
import requests
import json
import jsonpath
import eventlet

#请求头
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'
}
#保存的文件夹
final_folder = './Konachan/'

def htmlsrc(x):
    #二进制转str
    response=requests.get(x,headers=headers)
    file_obj=open('temp.html','w',encoding='utf-8')
    file_obj.write(response.content.decode('utf-8'))
    file_obj.close()
    file_obj=open('temp.html','r',encoding='utf-8')
    html=file_obj.read()
    file_obj.close()
    return html

def konachan():
    #起始页是1
    n=1
    #目录
    os.makedirs(final_folder, exist_ok=True)
    #给爷爬
    while True:
        print('---------------------------')
        print('目前:第{}页'.format(n))
        
        #获取html
        url='https://konachan.net/post?page='+str(n)
        html=htmlsrc(url)
        
        #解析html
        soup=BeautifulSoup(html,'lxml') 
        soup=soup.find('ul',{'id':"post-list-posts"})
        
        for each_pic in soup.find_all('li',style="width: 170px;"):
            r = 123
            id_=each_pic.get('id')
            
            try:
                if each_pic.find('a',class_="directlink largeimg"):
                    pic_url=each_pic.find('a',class_="directlink largeimg").get('href') #获取href的值
                elif each_pic.find('a',class_="directlink smallimg"):
                    pic_url=each_pic.find('a',class_="directlink smallimg").get('href')
                
                if os.access(final_folder+'%s.jpg'%id_, os.F_OK):
                    print('图片{}存在,跳过'.format(id_))
                    continue                      
                #防止超时             
                eventlet.monkey_patch()
                with eventlet.Timeout(180,False):
                    r = requests.get(pic_url,headers=headers)
                    print('图片ID:'+id_)
                if r == 123:
                    continue
                with open(final_folder+'%s.jpg'%id_, 'wb') as f:
                    f.write(r.content)
                        
            except AttributeError:
                continue
            except Exception:
                continue
            
        #爬完一页休息一下    
        print('进入休眠')
        time.sleep(5)
        n=n+1    

konachan()

考虑到很多人没有Python环境,呢我打包一个好了。
环境要求:Win7/10 x64系统
链接:

此处内容需要评论回复后(审核通过)方可阅读。

点开运行即可,图片自动保存在./Konachan下面。

Tip

  1. 由于是国外网站,打开你的 Pro|xy 工具肯定能够加速
  2. 推荐使用方法:每半年爬一个晚上,一个晚上能爬5G多的图片
  3. 你可以自己改写成多线程的程序,加快爬取速度
Last modification:February 14th, 2020 at 02:00 pm
Compared with money, your comment could inspire me more.
相较于钱财,你的留言更能激发我创作的灵感