python多线程爬取妹子图
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多线程爬取妹子图相关推荐
- python项目-爬取妹子图
最近在学爬虫,写了一个爬取妹子图片 功能:自动下载妹子图,并自动命名 网址:http://www.netbian.com/meinv/ #!/usr/bin/env python # -*- codi ...
- python爬虫爬取妹子图
爬取网页 req = urllib.request.Request(url)req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; WOW ...
- 爬取妹子图(python):爬虫(bs+rq)+ gevent多线程
爬取妹子图(python):爬虫(bs+rq)+ gevent多线程 简介 我观察爬取妹子图算是爬虫专业户必做的事情之一,所以我也做了一个,结果是有3.45GB,49847张图. 打算依靠这个图库做个 ...
- Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...
- python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- Python 多线程爬取西刺代理
西刺代理是一个国内IP代理,由于代理倒闭了,所以我就把原来的代码放出来供大家学习吧. 镜像地址:https://www.blib.cn/url/xcdl.html 首先找到所有的tr标签,与class ...
- python多线程爬取ts文件并合成mp4视频
python多线程爬取ts文件并合成mp4视频 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python多线程爬取ts文件并合成mp4视频 前言 一.分析页面 ...
最新文章
- 18.实现标准的Dispose模式
- python连接数据库示例(东西写得很详细,剽过来了)
- eclipse 配置黑色主题
- 日语python怎么说_python+Mecab,一次性学会日语分词
- mysql 随机选取一条记录
- php的web能力,web 性能的几个概念。
- c语言面试题东软,2012东软笔试题
- 雷军1994年写的老代码曝光,被称像诗一样优雅
- Angular6_PWA
- 【zblog模板】随然响应式导航网址目录主题
- 从ca提取keystore_从keystore(jks)文件中提取私钥
- L1-035 情人节 (15 分)—团体程序设计天梯赛
- cocos 发布android 返回值2,用cocos creator打包发布的时候,编译失败是怎么回事?执行命令出错,返回值:1。...
- 为qt程序添加ico图标
- Dell安装Ubuntu教程
- 寒假2019培训:跳楼机(洛谷P3403)
- IT界最伟大的十位人物
- python程序语言和机器人控制系统_机器人系统设计与制作:Python语言实现
- android贪食蛇详细教程实现加源码
- 如何实现Shell脚本开机自运行
热门文章
- java当中的定时器的4种使用方式(delay,period)
- 【UE4笔记】蓝图联机游戏制作
- Docker基础笔记
- Excel中批量生成标签,批量打印标签。按指定模板批量打印标签
- SQL 忽略大小写模糊查询
- c语言 习题错题知识点(1) (关键字 合法数据类型 逗号运算符)
- response.setHeader()的用法详解及实现文件下载过程中出现问题的分析
- 糖尿病视网膜病变的深度学习系统笔记
- 什么情况下你会毫不犹豫地辞职?
- “拼多多和短视频极速版”,让我怎么吐槽你好呢!