python爬取斗图啦表情包并下载到本地

649 阅读1分钟

迫于无聊,又刚好正在学习python,就来记录一篇关于python爬取图片链接下载本地的入门文章...

主要用到的模块: requestBeautifulSoup4 开发之前建议先看一下官方给出关于这两个模块的文档

开发环境:

  • python3.6.6
  • vscode
  • node v8.10

不同的python版本在部分代码上可能会有差异,请务必核对好版本...

开发流程解析

第一步:需要通过request获取页面的源代码
response = requests.get(url, headers=header, timeout=30)
第二步:分析页面结构

QQ截图20181225105322.png

通过上图发现,他的每一个img标签的class都是img-responsive lazy image_dta

那么我们就可以直接通过bs4的find_all属性将其取出...

datas = soup.find_all(
        name="img", attrs={"class": "img-responsive lazy image_dta"})

因为find_all取出的是一个数组,那么我们就需要去进行循环读取每个img标签

for data in datas:
        print("downloading:", data.attrs['data-original'])
        request.urlretrieve(
            data.attrs['data-original'], downPath+'\%s.jpg' % time.time())

这边用的是request.urlretrieve进行资源下载...

需要注意的是,一般来讲我们都是去获取图片的src属性,但是由于这个网站使用了图片延时加载,所以我们直接获取src的话就取到他默认的图片,这边我们可以看到img的data-original属性是包含了图片的路径的,所以我们就直接取data-original就可以了....

最后main方法执行...

if __name__ == '__main__':
    pool = ThreadPool(4)
    urls = [
        "http://www.doutula.com/photo/list/?page={}".format(str(i)) for i in range(1, 3)]
    pool.map(getImg, urls)
    pool.close()
    pool.join()

这边运用了线城池进行简单的代码优化,后面会加入代理池和队列进行优化。

代码地址:python爬取表情包并下载到本地

如果代码有帮助到您,记得点个start哦~~~