python:多线程爬虫(美女照片)

上编刚刚写的py,,而进度条不是很满意,而且 是单线程,所以修改为多线程,如果网络快,5分钟全部下载完全,该网站并发不好,而且经常访问不了,出现失败很正常。

只是学习py爬虫吧了。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib
from os import path,makedirs
import re
from threading import Thread
from datetime import datetime
def trypicdir(picpath):
    if not path.exists(picpath):     #下载到的本地目录,路径不存在时创建一个
        makedirs(picpath)

#显示下载进度
def schedule(a,b,c):
    ‘‘‘‘‘
    a:已经下载的数据块
    b:数据块的大小
    c:远程文件的大小
    ‘‘‘
    per = 100.0 * a * b / c
    if per > 100 :
        per = 100
    #print (‘%.2f%%‘ % per)
    print (‘%.2f%%‘ % per),

#获取html源码
def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html
#正则匹配分页
def findPage(html):
    myItems = re.findall(‘<span>(\d*)</span>‘, html, re.S)
    if myItems :
        return myItems.pop()
    else:
        return 0
#正则匹配列表
def findList(html):
    Items = re.findall(‘<span><a href="http://www.mzitu.com/(\d*)" target="_blank">(.*?)</a></span>‘, html, re.S)
    myItems=[]
    for i in Items:
        myItems.append((i[0]))
    return myItems

#下载图片
def downloadImg(url_pic,picpath):
    tmppic = re.findall("http:\/\/www.mzitu.com/(.*?)$",url_pic,re.S)[0]
    picfile = picpath+‘/%s.jpg‘ % ‘_‘.join(tmppic.split(‘/‘))
    html=getHtml(url_pic)
    myItems = re.findall(‘<p><a href="http:\/\/www.mzitu.com/.*?" ><img src="(.*?)" alt=".*?" /></a></p>‘,html,re.S)
    print (‘\n正在下载%s图片存储到本地%s.....‘%(url_pic,picfile))
    try:
        urllib.urlretrieve(myItems[0], picfile, schedule)
    except:
        print (‘下载%s图片存储到本地%s失败,请检查链接是否有问 ‘%(url_pic,picfile))

#单个美女连接下载
def getdowns(modelUrl,picpath):
    listHtml=getHtml(modelUrl)
    TotablNum=findPage(listHtml)
    if TotablNum != 0:
        for i in range(1,(int(TotablNum)+1)):
            downloadImg(url_pic=‘%s/%s‘%(modelUrl,i),picpath=picpath)
    else:
        downloadImg(url_pic=‘%s‘%(modelUrl),picpath=picpath)
‘‘‘
思路:
1、获取所有美女连接列表。
2、获取单个美女总连接数。
3、下载。
‘‘‘
if __name__ == ‘__main__‘:
    starttime=datetime.now()
    #picpath=r"F:\mypython3\9temp\9tmp_pic"
    picpath=‘/tmp/pic_tmp2‘
    trypicdir(picpath=picpath)
    #downloadImg(url_pic=‘http://www.mzitu.com/80942/43‘,picpath=picpath)
    listHtml = getHtml(‘http://www.mzitu.com/model‘)    #这是其中一个模块的url,可以添加不同的模块url从而达到整站爬取。
    listContent = findList(listHtml)
    #print ("listContent:",listContent)
    #多线程使用方法
    threads = []
    for i in listContent:
        threads.append(Thread(target=getdowns,args=(‘http://www.mzitu.com/%s‘%i,picpath)))
    for t in threads:
        #t.setDaemon(True)
        t.start()
    ‘‘‘
    #单线程使用方法.
    for m in listContent:
        getdowns(modelUrl=‘http://www.mzitu.com/%s‘%m,picpath=picpath)
    ‘‘‘
    endtime=datetime.now()
    print ("恭喜,所有美女图片已经下载完成,下载美女照片所花费时间为:%s秒."%(endtime-starttime).seconds)
时间: 2024-08-07 17:00:48

python:多线程爬虫(美女照片)的相关文章

python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)

python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests库实现发送请求.获取响应. xpath实现数据解析.提取和清洗 threading模块实现多线程爬虫 爬取结果: 思路:由于该爬虫存在网络密集IO和磁盘密集IO,存在大量等待时间,遂采用多线程方式爬取. 设计:本文采用多为结构化代码的面向对象封装设计思路,使用生产消费者模型,完成多线程的调度.爬取.

python多线程爬虫的简单例子

Python多线程(http://www.maiziedu.com/course/python/)主要是通过thread和threading这两个模块来实现的.thread模块是比较底层的模块,threading模块是对thread做了一些包装的,可以更加方便的使用. 虽然python的多线程受GIL限制,并不是真正的多线程,但是对于I/O密集型计算还是能明显提高效率,比如说爬虫. 下面用一个实例来验证多线程的效率.代码只涉及页面获取,并没有解析出来. # -*-coding:utf-8 -*-

python多线程爬虫设计及实现示例

爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程:第二种方案是每个步骤运行一个多线程,比如N个线程进行获取,1个线程进行解析(多个线程之间切换会降低效率),N个线程进行存储. 下面我们尝试抓取http://www.chembridge.com/ 库存药品信息. 首先确定url为http://www.chembridge.com/search/se

python 多线程爬虫

最近,一直在做网络爬虫相关的东西. 看了一下开源C++写的larbin爬虫,仔细阅读了里面的设计思想和一些关键技术的实现. 1.larbin的URL去重用的很高效的bloom filter算法: 2.DNS处理,使用的adns异步的开源组件: 3.对于url队列的处理,则是用部分缓存到内存,部分写入文件的策略. 4.larbin对文件的相关操作做了很多工作 5.在larbin里有连接池,通过创建套接字,向目标站点发送HTTP协议中GET方法,获取内容,再解析header之类的东西 6.大量描述字

Python多线程爬虫爬取电影天堂资源

最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. 先来简单介绍一下,网络爬虫的基本实现原理吧.一个爬虫首先要给它一个起点,所以需要精心选取一些URL作为起点,然后我们的爬虫从这些起点出发,抓取并解析所抓取到的页面,将所需要的信息提取出来,同时获得的新的URL插入到队列中作为下一次爬取的起点.这样不断地循环,一直到获得你想得到的所有的信息爬虫的任务

利用Python多线程爬虫——爬图片

程序功能大概就是爬取每个网页中的图片,并根据标题,分文件保存至指定目录,使用threading实现多线程. 主要流程为每访问一个网页,将此网页中的图片链接依次放入队列,根据图片数量依次开启下载线程,传入队列和编号,然后启动线程开始下载,主线程查询当前正在活动的线程数量,当数量为1的时候,即只剩主线程的时候,表示所有图片下载完毕,开始下一个网页. class threadDownload(threading.Thread): def __init__(self,que,no): threading

python多线程爬虫:亚马逊价格

import re import requests import threading import time from time import ctime,sleep from queue import Queue keywords_a=[ 'ELPLP80', 'ELPLP23', 'ELPLP29', 'NP14LP', 'POA-LMP126', 'ELPLP66', ] keywords_b=[ 'VIP230W0.8E20.8', 'VIP240W0.8E20.9N', 'NP30LP

python实现爬虫下载美女图片

python实现爬虫下载美女图片 本次爬取的贴吧是百度的美女吧,给广大男同胞们一些激励 在爬取之前需要在浏览器先登录百度贴吧的帐号,各位也可以在代码中使用post提交或者加入cookie 爬行地址:http://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0 #-*- coding:utf-8 -*- import urllib2 import re import requests from lxml import etree 这

python爬虫入门(四)利用多线程爬虫

多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进程可以包含多个线程4.一个进程的内存空间是共享的,每个进程里的线程都可以使用这个共享空间5.一个线程在使用这个共享空间的时候,其它的线程必须等待(阻塞状态)6.互斥锁作用就是防止多个线程同时使用这块内存空间,先使用的线程会将空间上锁,其它的线程处于等待状态.等锁开了才能进7.进程:表示程序的一次执行