threading模块多线程下载斗图图片

涉及
lxml模块的css选择器
requests库
threading多线程
测试环境为python 2.7

#coding=utf8

import re
import os
import lxml.html
import requests
import threading
import time

def get_url(url):
    html = requests.get(url).content
    soup = lxml.html.fromstring(html)
    src_list = soup.cssselect('a.col-xs-6.col-sm-3') #css选择器选择图片class
    url_list = []
    title_list = []
    for src in src_list:
        img_url = re.compile('data-original="(http:)?//(.*?)"').search(lxml.html.tostring(src)).group(2) #获取图片class中的图片url
        url_list.append(img_url)
        title = src.text_content().replace('\n','').replace(' ', '').strip() #获取图片标题
        title_list.append(title)
    start_save_img(url_list,title_list)

def save_img(img_url,title):
    img_url = 'http://'+img_url
    img_format = re.compile('\.jpg|\.png|.gif').search(img_url).group()
    img_content = requests.get(img_url).content
    print '正在下载'+ img_url
    if not os.path.exists('./img'):
        os.mkdir('img')
    with open('img/{}{}'.format(title.encode('utf-8'), img_format), 'wb') as f:
        f.write(img_content)

def start_save_img(url_list,title_list):
    for i in range(len(url_list)):
        th = threading.Thread(target=save_img,args=(url_list[i],title_list[i])) #多线程下载
        th.start() #开启多线程

def start():
    for i in range(1,10):
        url = 'https://www.doutula.com/photo/list/?page={}'.format(i)
        get_url(url)
        time.sleep(3)

if __name__ == '__main__':
    start()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 19,319评论 4 417
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,950评论 1 61
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    aimaile阅读 26,832评论 6 427
  • 其实,没有失望也不会高兴,就此而已。
    water159阅读 193评论 0 0
  • 我在参考书上写了如题那句话。 写完就忘了。 考过了,回头一看,觉得有点搞笑。 不按常理出牌呀,我的计划是,考过也差...
    去社阅读 246评论 1 0

友情链接更多精彩内容