python多线程爬取妹子图

  • python使用版本:
    3.7
  • 目的:
    自己选择下载目录,逐个将主题图片保存到选定目录下。
  • 效果:
    一秒钟左右下载一张图片,下了七八十组图片暂时没什么问题,不放心的话,可以速度再放慢点。
  • 注意:
    网页的请求头’headers’要加上’referer’参数,不然页面内容无法正常返回。
    xpath返回的是列表,使用切片赋值。
  • 小坑:
    直接用xpath获取的主题名字创建文件夹或者文件命名,可能会出错,会出现非法字符,比如’?'等,用正则处理下。
  • 改进:
    针对每一个图片创建url队列,再单独调用线程下载,看起来可能会舒心点。(暂时就这样吧)

代码块如下,初次学习,还请各位多多指教:

#encoding=utf_8import os
import requests
from lxml import etree
from queue import Queue
import re
import time
import tkinter
from tkinter import filedialog
from threading import Threadclass BelleSpider():def __init__(self):#用于存放每一个人物图片theme的url队列self.q = Queue()    self.pre_url = 'https://www.mzitu.com/xinggan/page/'self.headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36','referer':'https://www.mzitu.com/xinggan/'}def get_theme(self,start_page=1):i = start_pagewhile True:page = str(i)print('{0:*^50}'.format('正在写入第{}页url地址'.format(i)))response = requests.get(self.pre_url + page, headers=self.headers)print(response.url)html_content = response.content.decode()tree = etree.HTML(html_content)a = tree.xpath("//ul[@id='pins']/li/span[1]/a")for each in a:theme_url = each.xpath('./@href')[0]theme_text = each.xpath('./text()')[0]'''put,block参数默认为True,如果队列满了,则会阻塞等待。'''self.q.put((theme_text,theme_url))time.sleep(2)'''有下一页,就继续抓取图片主题url'''if html_content.find('下一页') > 0 :i += 1else:print('最后一页theme主题url已经抓取完了~')breakdef download(self,start_page=1):global  download_directorywhile True:print('准备获取队列大小:{}'.format(self.q.qsize()))if not self.q.empty():'''默认block=True,队列为空,就会阻塞,直到有数据可以取出。'''get = self.q.get()self.q.task_done()the_theme,the_url = get'''文件命名规则原因,文件名剔除一些特殊的符号'''regexp_bat = re.compile('[\??\.。!!]*')theme = regexp_bat.sub('',the_theme)url = the_urlmkdir = os.path.join(download_directory , theme)print('theme文件名称为:{}',format(mkdir))if not os.path.exists(mkdir):'''如果没有这个目录,则创建该目录'''os.mkdir(mkdir)'''定义该目录下载初始页:1'''picture_page = start_pagewhile True:the_picture_page_content = requests.get(url=url+'/'+str(picture_page),headers=self.headers).content.decode()tree = etree.HTML(the_picture_page_content)'''xpath提取图片下载地址'''the_download_url = tree.xpath("//div[@class='main-image']/p/a/img/@src")[0]response = requests.get(url=the_download_url,headers=self.headers)pic_name = '{}/{}-{}.jpg'.format(mkdir,theme,picture_page)'''保存图片到目录'''with open(pic_name, 'wb') as f:f.write(response.content)print('已经保存好图片{}-{}......'.format(theme,picture_page))time.sleep(1.5)'''下一页'''picture_page += 1'''如果有下一组,表示这组图片已经爬完了,这个循环结束。'''if the_picture_page_content.find('下一组') > 0:print('当前页已经抓取完毕,请稍等10s钟......')time.sleep(10)breakelse:print('该文件已经下载{}'.format(mkdir))else:print('队列已经掏空了~~')breakdef main(self,start_time_wait=10,thread_count=3):t1 = Thread(target=self.get_theme)t1.start()print('稍等{}秒,程序即将下载图片...'.format(start_time_wait))'''先等待若干秒,防止队列为空,t2线程q.empty直接跳出循环结束线程。'''time.sleep(start_time_wait)for i in range(thread_count):t2 = Thread(target=self.download)t2.start()'''线程阻塞,直接队列所在线程运行完毕,主线程才往下走。'''self.q.join()print('所有文件已经下载完毕!')if __name__ == '__main__':win = tkinter.Tk()'''调用窗口,选择下载目录'''download_directory = filedialog.askdirectory()m = BelleSpider()m.main(start_time_wait=5)print('Done!')'''结束Tk'''win.mainloop()

python多线程爬取妹子图相关推荐

  1. python项目-爬取妹子图

    最近在学爬虫,写了一个爬取妹子图片 功能:自动下载妹子图,并自动命名 网址:http://www.netbian.com/meinv/ #!/usr/bin/env python # -*- codi ...

  2. python爬虫爬取妹子图

    爬取网页 req = urllib.request.Request(url)req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; WOW ...

  3. 爬取妹子图(python):爬虫(bs+rq)+ gevent多线程

    爬取妹子图(python):爬虫(bs+rq)+ gevent多线程 简介 我观察爬取妹子图算是爬虫专业户必做的事情之一,所以我也做了一个,结果是有3.45GB,49847张图. 打算依靠这个图库做个 ...

  4. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  5. python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图

    Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...

  6. python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...

  7. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  8. Python 多线程爬取西刺代理

    西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 镜像地址:https://www.blib.cn/url/xcdl.html 首先找到所有的tr标签,与class ...

  9. python多线程爬取ts文件并合成mp4视频

    python多线程爬取ts文件并合成mp4视频 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python多线程爬取ts文件并合成mp4视频 前言 一.分析页面 ...

最新文章

  1. 18.实现标准的Dispose模式
  2. python连接数据库示例(东西写得很详细,剽过来了)
  3. eclipse 配置黑色主题
  4. 日语python怎么说_python+Mecab,一次性学会日语分词
  5. mysql 随机选取一条记录
  6. php的web能力,web 性能的几个概念。
  7. c语言面试题东软,2012东软笔试题
  8. 雷军1994年写的老代码曝光,被称像诗一样优雅
  9. Angular6_PWA
  10. 【zblog模板】随然响应式导航网址目录主题
  11. 从ca提取keystore_从keystore(jks)文件中提取私钥
  12. L1-035 情人节 (15 分)—团体程序设计天梯赛
  13. cocos 发布android 返回值2,用cocos creator打包发布的时候,编译失败是怎么回事?执行命令出错,返回值:1。...
  14. 为qt程序添加ico图标
  15. Dell安装Ubuntu教程
  16. 寒假2019培训:跳楼机(洛谷P3403)
  17. IT界最伟大的十位人物
  18. python程序语言和机器人控制系统_机器人系统设计与制作:Python语言实现
  19. android贪食蛇详细教程实现加源码
  20. 如何实现Shell脚本开机自运行

热门文章

  1. java当中的定时器的4种使用方式(delay,period)
  2. 【UE4笔记】蓝图联机游戏制作
  3. Docker基础笔记
  4. Excel中批量生成标签,批量打印标签。按指定模板批量打印标签
  5. SQL 忽略大小写模糊查询
  6. c语言 习题错题知识点(1) (关键字 合法数据类型 逗号运算符)
  7. response.setHeader()的用法详解及实现文件下载过程中出现问题的分析
  8. 糖尿病视网膜病变的深度学习系统笔记
  9. 什么情况下你会毫不犹豫地辞职?
  10. “拼多多和短视频极速版”,让我怎么吐槽你好呢!