怎么用爬虫批量抓取网页中的图片?

图片描述

如图,通过network查看加载图片,要一张一张右键保存很麻烦,有没有办法写个爬虫批量抓取这里的图片》?

阅读 7.6k
4 个回答

这个需求, 如果你会爬虫其实很简单, 不外乎几个步骤:

  1. 首页或者有图片的页面, 通过正则或者其他框架, 获取图片的url

  2. 通过requests库或者urllib库, 访问上面图片url的地址

  3. 以二进制的形式, 写入本地硬盘

参考代码:

import re, requests

r = requests.get("http://...页面地址..")
p = re.compile(r'相应的正则表达式匹配')
image = p.findall(r.text)[0]  # 通过正则获取所有图片的url
ir = requests.get(image)      # 访问图片的地址
sz = open('logo.jpg', 'wb').write(ir.content)  # 将其内容写入本地
print('logo.jpg', sz,'bytes')

更多详情, 可以参考学习requests官方文档: requests文档

可以的,
爬虫五个部分:
调度程序
url去重
下载器
网页解析
数据存储
对于下载图片的思路是:
获取图片所在网页内容,解析img标签,得到图片地址,然后便利图片网址,下载每张图片,将下载过的图片地址保存在布隆过滤器中,避免重复下载,每次下载一张图片时,通过网址检查是否下载过,当图片下载到本地后,可以将图片路径保存在数据库中,图片文件保存在文件夹中,或者直接将图片保存在数据库中。
python使用request+beautifulsoup4
java使用jsoup

如果多个网站或者一个网站需要爬到很深的情况下,楼上的方式直接递归或者深度遍历就OK

这个也有点简单了吧,之前观点网爬知乎的代码,直接给你上了:

def download_img(url,classify):
    try:
        extention=get_extension(url)
        if(extention is None):
            return None
        req = urllib2.Request(url)
        resp = urllib2.urlopen(req,None,3)
        dataimg=resp.read()
        name=str(uuid.uuid1()).replace("-","")+"_www.guandn.com"+extention
        top="E://topic_pic"
        folder=makeDateFolder(top, classify)
        filename=None
        if folder is not None:
            filename  =folder+"//"+name
        try:
            if "e82bab09c_m" in str(url):
                return True
            if not os.path.exists(filename):
                file_object = open(filename,'w+b')
                file_object.write(dataimg)
                file_object.close()
                return '/room/default/'+GetDateString()+'/'+str(classify)+"/"+name
            else:
                print "file exist"
                return None
        except IOError,e1:
            print "e1=",e1
            pass
    except Exception as e:
        print "eee",e
        pass
    return None #如果没有下载下来就利用原来网站的链接

原文在这里:http://www.cnblogs.com/huangx...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏