如何用爬虫爬取精美的图片!

起因: 因为要做和图像识别有关的东西,需要很多的图片,但我这个人很懒,又不想自己动手找。于是乎,我就打起了爬虫的主意。我开始找网上的各种爬虫教程和一些经典案例,但是我没有找到一个即简单完整的爬虫程序。没办法,我只有自己动手啦。如果你和我一样,想快速学会爬虫,编写出易于理解、完整且简单的小爬,你可以继续往下看看。
准备工作:
1、爬取的网站:wallhaven:https://wallhaven.cc/ 【该网站的图片高清幽美、令人赞叹,两个字"极好"】
类似于下面这张图,是不是还不错?
在这里插入图片描述
2、涉及到的学习内容
编写语言:python 【附上官网教程
python包:
(1)BeautifulSoup:BeautifulSoup4和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。
(2)requests:作为用户角色,请求页面。
分析爬取内容:
1、分析主页面
主界面可以使用搜索,若想筛选出有雾的图像,可直接在搜索框中查找"FOG"
跳转页面后观察规律,url = https://wallhaven.cc/search?q=FOG&page=%s"%(i)是这样的。q是查询的参数,page表示第几页。
2、分析源代码的形式
目的很明确,需要高清的图片,因此,需要点击对应的图片,跳转到高清的图片页面中,然后再提取高清图片。
3、获取代理对象
User-Agent:通过Headers找到。
下面通过具体的代码,来解释整个流程。

from bs4 import BeautifulSoup
import requests
#用户代理,作为用户的角色访问网站
gHeads = {
    "User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36"
}
#整个for循环用于控制图片展示页面(第几页)
for i in range(5,20):
    url = "https://wallhaven.cc/search?q=FOG&page=%s"%(i)
    print(url)
    html = requests.get(url,headers=gHeads)#请求页面
    html = html.content#获取源码
    soup = BeautifulSoup(html, 'lxml')#对界面进行解析
    href_all = soup.find_all( 'a',{"class": "preview"})#找到对应的a,且其class=preview
    for href in href_all:#打开高清图片的新页面
        href_url = href['href']#找到对应的href属性值
        #重复上述的源码获取和页面解析
        html4 = requests.get(href_url,headers=gHeads).content
        soup4 = BeautifulSoup(html4, 'lxml')
        img4 = soup4.find( 'img',{"id": "wallpaper"})#找到img标签,且id = wallpaper
        urlimg = img4['data-cfsrc'] #获取属性值
        #将图片下载到本地
        r = requests.get(urlimg, stream=True)#r是response响应对象,stream=true是以字节流的方式读取数据,同时用于确保数据不会直接全部下载到内存中,便于下一步用r.iter_content实现边下载边存储(因为数据太大可能会超时)。
        image_name = urlimg.split('/')[-1]#获取图片名
        with open('F:/Image/%s' % image_name, 'wb') as f:#Image文件必须存在;with as可以方便实现文件的打开和关闭,且容易处理异常
            for chunk in r.iter_content(chunk_size=128):#利用for循环,将响应对象response(r)中的数据信息 通过iter_content方法 依次读取大小为128字节的数据块(先下载到内存中,满128字节后存储到硬盘中,实现边下载边存储),直至数据读完为止。 
                f.write(chunk)
        print('Saved %s' % image_name)
    print("end.....................")   

部分结果展示:
在这里插入图片描述
上面的过程较为简单,建议小伙伴们先测试一下,看效果,然后一步一步来理解。


若是有不理解的地方,可以在下方留言,我看到后会及时回复的。有问题咱一起解决,共同进步。

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值