跳墙的爷 发表于 2018-12-19 10:33

爬虫批量下载今日头条的图片

逛今日头条,发现有些好的图片想搜藏,作为刚学python的小白,立即实践,用正则写了个简单的脚本,自动在桌面创建文件夹,下载头条文章里面的图片。
使用方法:1、只用填写网址url。2、填写下载文件夹路径及名称path。3、运行

头条图片存在两种形式,一种是单网页帖子里的图片,另外一种是幻灯片形式的图片集,分别对应两份代码。

------------------------------------------分隔符----------------------------------------
下载实例







------------------------------------------分隔符----------------------------------------
单网页帖子里的图片下载
import urllib.request
import re
import urllib.error

#添加安装opener()为全局,伪装浏览器报头
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36")   #根据浏览器填写
opener = urllib.request.build_opener()
opener.addheaders =
urllib.request.install_opener(opener)

#填写参数
url = "https://www.toutiao.com/i6489288219677442574/"      #网页爬取地址
pat = 'http://(.*?)"'    # 图片地址正则表达式
path = "E:/桌面/情侣头像/"   #存储目录,注意需要先创建好文件夹
hp = 'http://'#图片地址构造部分,若无则填写''

#创建下载文件夹
def mkdir(path):
    import os

    folder = os.path.exists(path)
    if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹
      os.makedirs(path)            #makedirs 创建文件时如果路径不存在会创建这个路径
      print ("---文件夹创建成功---\n")
    else:
      print ("---文件夹已存在!---\n")

mkdir(path)             #调用函数


#获取网页中图片地址数据
def get_data(url,pat):
    html = urllib.request.urlopen(url)#打开网页
    data = html.read().decode("utf-8","ignore")      #获取网页数据
    # print(len(data))    #测试用
    html.close() #网页关闭,否则会出现意想不到的问题
    imglist = re.compile(pat).findall(data)       #搜索图片地址,存在列表imglist中
    # print(len(imglist))   #测试用
    # print(imglist)    #测试用
    return imglist

#获取图片(存储路径,图片地址构造)
def get_img(path,hp):
    imglist = get_data(url,pat)   #调用上方数据函数,注意这里需要使用imglist=调用函数,否则显示for----中 的imglist未定义
    # imglist = re.compile(pat).findall(data)       #搜索图片地址,存在列表imglist中
    for i in range(0,len(imglist)):   #爬取每一个图片
      try:
            imgurl = hp + imglist
            # print(imgurl)   #测试用

            file = path + str(i) + ".jpg"      #创建本地目录
            
            urllib.request.urlretrieve(imgurl,filename = file)      #下载到本都,文件名为file
            print("第" + str(i) + "个爬取---成功")
      
      except urllib.error.URLError as er:
            if hasattr(er,"code"):
                print(er.code)
            if hasattr(er,"reason"):
                print(er.reason)
      except Exception as e:
            print(e)

get_img(path,hp)    #调用函数

print("\n---结束---")

------------------------------------------分隔符----------------------------------------
幻灯片形式的图片集
import urllib.request
import re
import urllib.error

#添加安装opener()为全局,伪装浏览器报头
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36")   #根据浏览器填写
opener = urllib.request.build_opener()
opener.addheaders =
urllib.request.install_opener(opener)

#填写参数
url = "https://www.toutiao.com/i6460804345263817230/"      #网页爬取地址
pat = r'uri\\":\\"origin\\\\/(.*?)\\",\\"height'    # 图片地址正则表达式   原表达式为,uri\":\"origin\\/(.*?)\",\"height,李荣r''进行其中\需要转义,即\\代表\,r为转义方法
path = "E:/桌面/人民币景点/"   #存储目录,注意需要先创建好文件夹
hp = 'http://p99.pstatp.com/origin/'#图片地址构造部分,若无则填写''

#创建下载文件夹
def mkdir(path):
    import os

    folder = os.path.exists(path)
    if not folder:                   #判断是否存在文件夹如果不存在则创建为文件夹
      os.makedirs(path)            #makedirs 创建文件时如果路径不存在会创建这个路径
      print ("---文件夹创建成功---\n")
    else:
      print ("---文件夹已存在!---\n")

mkdir(path)             #调用函数


#获取网页中图片地址数据
def get_data(url,pat):
    html = urllib.request.urlopen(url)#打开网页
    data = html.read().decode("utf-8","ignore")      #获取网页数据
    # print(len(data))    #测试用
    # print(data)
    imglist = re.compile(pat).findall(data)       #搜索图片地址,存在列表imglist中
    # print(len(imglist))   #测试用
    # print(imglist)    #测试用
    html.close() #网页关闭,否则会出现意想不到的问题
    return imglist

#获取图片(存储路径,图片地址构造)
def get_img(path,hp):
    imglist = get_data(url,pat)   #调用上方数据函数,注意这里需要使用imglist=调用函数,否则显示for----中 的imglist未定义
    # imglist = re.compile(pat).findall(data)       #搜索图片地址,存在列表imglist中
    for i in range(0,len(imglist)):   #爬取每一个图片
      try:
            imgurl = hp + imglist
            # print(imgurl)   #测试用

            file = path + str(i) + ".jpg"      #创建本地目录
            
            urllib.request.urlretrieve(imgurl,filename = file)      #下载到本都,文件名为file
            print("第" + str(i) + "个爬取---成功")
      
      except urllib.error.URLError as er:
            if hasattr(er,"code"):
                print(er.code)
            if hasattr(er,"reason"):
                print(er.reason)
      except Exception as e:
            print(e)

get_img(path,hp)    #调用函数

print("\n---结束---")


执念i_ 发表于 2018-12-19 10:43

来了老弟!感谢分享

nice小萌萌 发表于 2018-12-19 10:53

微博的有吗?

NSNSDHS 发表于 2018-12-19 11:04

谢谢分享

GGyx4 发表于 2018-12-19 11:06

刚好昨天看了一个新闻,说TB上有人卖各种图片。看来会写代码的人会省不少钱啊。

quwujin 发表于 2018-12-19 11:15

报错了
远程主机强迫关闭了一个现有的连接

噜冰花 发表于 2018-12-19 11:18

写个大众点评的采集不知道和这个原理一样不

myang 发表于 2018-12-19 11:22

谢谢分享。。。。。

UC大法好 发表于 2018-12-19 11:47

感谢分享,学习了

被掏了心的洋葱 发表于 2018-12-19 14:05

加个好友?
页: [1] 2
查看完整版本: 爬虫批量下载今日头条的图片