从百度图库爬数据的python实现

# -*- coding: utf-8 -*-
import re
import sys
import urllib
import requests

def get_onepage_urls(onepageurl):
    if not onepageurl:
        print('已到最后一页, 结束')
        return [], ''
    try:
        html = requests.get(onepageurl)
        html.encoding = 'utf-8'
        html = html.text
    except Exception as e:
        print(e)
        pic_urls = []
        fanye_url = ''
        return pic_urls, fanye_url
    pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
    fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
    fanye_url = 'http://image.baidu.com' + fanye_urls[0] if fanye_urls else ''
    return pic_urls, fanye_url


def down_pic(pic_urls):
    for i, pic_url in enumerate(pic_urls):
        try:
            pic = requests.get(pic_url, timeout=15)
            string = str(i + 1) + '.jpg'
            with open(string, 'wb') as f:
                f.write(pic.content)
                print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
        except Exception as e:
            print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
            print(e)
            continue


if __name__ == '__main__':
    keyword = '戴眼镜的人'  # 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
    url_init_first = r'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
    url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
    all_pic_urls = []
    onepage_urls, fanye_url = get_onepage_urls(url_init)
    all_pic_urls.extend(onepage_urls)

    fanye_count = 0  # 累计翻页数
    while 1:
        onepage_urls, fanye_url = get_onepage_urls(fanye_url)
        fanye_count += 1
        # print('第页' % str(fanye_count))
        if fanye_url == '' and onepage_urls == []:
            break
        all_pic_urls.extend(onepage_urls)

    down_pic(list(set(all_pic_urls)))

 关键词:

戴眼镜的人
done
戴眼镜的学生
done
戴眼镜的小孩 done
戴眼镜的小女孩头像 done
复古圆眼镜女生头像 done
可爱圆眼镜女生头像 done
戴眼镜很美的女生 done
戴眼镜的帅哥 done
普通男生生活照戴眼镜 done
戴眼镜男头像真人 done 
戴眼镜中年人 done
戴眼镜的明星 done
白敬亭戴眼镜 done 
戴方框眼镜的人 done 
戴眼镜的外国人 done
戴眼镜老年人 done
老年人戴眼镜图片 done 
戴近视眼镜的 done 
戴老婆2千度近视眼镜 done 
超级大框眼镜 done 
无框眼镜女士 done 
无框眼镜男生 done 
金丝框眼镜男生 done 
比较潮的眼镜框男生 done
复古眼镜 done 
复古半框眼镜 done 
戴老花镜老年人 done 
原文地址:https://www.cnblogs.com/wjjcjj/p/12267814.html