1. 单线程版

import requests
from lxml import etree
import time
import reclass HaiBaoSpider():def __init__(self):self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}self.start_url = "https://818ps.com/muban/haibao.html?user_source=r44926&bd_vid=9395005922550959355&sdclkid=b5gpA5fs15eG15eG"def get_html(self, url):response = requests.get(url, headers = self.headers)if response.status_code == 200:return response.content.decode("utf-8")else:return Nonedef parse_page(self, html_str, flag=1):html = etree.HTML(html_str)imgs = html.xpath("//img[@class='lazy']")data = []for i in imgs:item = {}item["img_name"] = i.xpath("./@alt")[0]item["img_url"] = "https:" + i.xpath("./@img-original")[0]data.append(item)if flag == 0:next_url = "https://818ps.com" + html.xpath("//li[@class='toppage']/a/@href")[0]else:next_url = "https://818ps.com" + html.xpath("//li[@class='toppage']/a/@href")[1]print(next_url)return data, next_urldef save_img(self, title, url):title = re.sub(r"[^\u4E00-\u9FFF]", "", title)end_name = re.search(r"\.[a-z]{3}[\?|!]", url).group()[:4]file_name = title + end_namefp = open("./data/海报图片爬虫/" + file_name, "wb")fp.write(requests.get(url).content)fp.close()print(file_name + "写入成功...")def run(self):html_str = self.get_html(self.start_url)data, next_url = self.parse_page(html_str, flag=0)for d in data:self.save_img(d["img_name"] , d["img_url"])while next_url:html_str = self.get_html(next_url)data, next_url = self.parse_page(html_str)for d in data:self.save_img(d["img_name"], d["img_url"])if __name__ == '__main__':hbs = HaiBaoSpider()hbs.run()

2.多线程版

import requests
from lxml import etree
import time
import re
import threading
import queueclass HaiBaoSpider():def __init__(self):self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}self.start_url = "https://818ps.com/muban/haibao.html?user_source=r44926&bd_vid=9395005922550959355&sdclkid=b5gpA5fs15eG15eG"self.list_url = queue.Queue(300)self.html_text = queue.Queue(300)self.img_urlAndTitle = queue.Queue(2000)def get_html(self, url):response = requests.get(url, headers = self.headers)if response.status_code == 200:return response.content.decode("utf-8")else:return Nonedef get_next_url(self, html_str, flag=1):html = etree.HTML(html_str)if flag == 0:next_url = "https://818ps.com" + html.xpath("//li[@class='toppage']/a/@href")[0]else:next_url = "https://818ps.com" + html.xpath("//li[@class='toppage']/a/@href")[1]return next_urldef get_list_url(self):html_str = self.get_html(self.start_url)next_url = self.get_next_url(html_str, flag=0)self.list_url.put(next_url)while next_url:html_str = self.get_html(next_url)next_url = self.get_next_url(html_str, flag=1)self.list_url.put(next_url)def get_list_html(self):while True:url = self.list_url.get()list_html = self.get_html(url)self.html_text.put(list_html)self.list_url.task_done()def get_img_urlAndTitle(self):while True:html_text = self.html_text.get()html = etree.HTML(html_text)imgs = html.xpath("//img[@class='lazy']")for i in imgs:item = {}item["img_name"] = i.xpath("./@alt")[0]item["img_url"] = "https:" + i.xpath("./@img-original")[0]self.img_urlAndTitle.put(item)self.html_text.task_done()def save_imgs(self):while True:img_item = self.img_urlAndTitle.get()title = re.sub(r"[^\u4E00-\u9FFF]", "", img_item["img_name"])end_name = re.search(r"\.[a-z]{3}[\?|!]", img_item["img_url"]).group()[:4]file_name = title + end_namefp = open("./data/海报图片爬虫/" + file_name, "wb")fp.write(requests.get(img_item["img_url"]).content)fp.close()print(file_name + "写入成功...")self.img_urlAndTitle.task_done()def run(self):thread_list = []#获取列表页url使用3个线程for i in range(3):thread_get_list_url = threading.Thread(target=self.get_list_url)thread_list.append(thread_get_list_url)#获取列表页html使用5个线程for i in range(5):thread_get_list_html = threading.Thread(target=self.get_list_html)thread_list.append(thread_get_list_html)#获取海报名称和图片url地址无需发器网络请求,故只用1个线程即可thread_parse_html = threading.Thread(target=self.get_img_urlAndTitle)thread_list.append(thread_parse_html)#保存图片用10个线程for i in range(10):thread_save_img = threading.Thread(target=self.save_imgs)thread_list.append(thread_save_img)for t in thread_list:t.setDaemon(True)   #将线程设置为后台进程,当主进程结束时子进程也结束t.start()   #开启进程time.sleep(1)#令主线程等待,当全部队列为空时方可结束主线程self.list_url.join()self.html_text.join()self.img_urlAndTitle.join()if __name__ == '__main__':hbs = HaiBaoSpider()hbs.run()

爬取结果如下:
卡通立夏节气动态海报.png写入成功…
卡通风格预防接种停诊通知宣传海报.jpg写入成功…
创意扁平风青年节动态海报.png写入成功…
废弃口罩处理方式垃圾分类黄色卡通手机海报.jpg写入成功…
废弃口罩处理方式垃圾分类橙色卡通手机海报.jpg写入成功…
行动表达爱母亲节对话手绘海报.jpg写入成功…
简约风旅游出行横板海报.jpg写入成功…
母亲节花式晒单宣传手机海报.jpg写入成功…
简约创意五月你好日签海报.png写入成功…
简约创意五四节超市促销横版海报.jpg写入成功…
手绘风五一音乐趴乐器演奏竖版海报.jpg写入成功…
简约风医护人员招聘手机海报.jpg写入成功…

Process finished with exit code -1
写入图片如下:

python多线程爬取海报图片相关推荐

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

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

  2. python多线程爬取妹子图

    python多线程爬取妹子图 python使用版本: 3.7 目的: 自己选择下载目录,逐个将主题图片保存到选定目录下. 效果: 一秒钟左右下载一张图片,下了七八十组图片暂时没什么问题,不放心的话,可 ...

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

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

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

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

  5. python爬虫,爬取下载图片

    python爬虫,爬取下载图片 分别引入以下三个包 from urllib.request import urlopen from bs4 import BeautifulSoup import re ...

  6. Python多线程抓取网页图片地址

    mini-spider 功能描述: 多线程网络爬虫,爬取网页图片地址(也可提取其他特征的URL) 使用python开发一个迷你定向抓取器mini_spider.py,实现对种子链接的广度优先抓取,并把 ...

  7. python多线程爬取多个网址_【Python爬虫】多线程爬取斗图网站(皮皮虾,我们上车)...

    原标题:[Python爬虫]多线程爬取斗图网站(皮皮虾,我们上车) 斗图我不怕 没有斗图库的程序猿是无助,每次在群里斗图都以惨败而告终,为了能让自己在斗图界立于不败之地,特意去网上爬取了斗图包.在这里 ...

  8. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  9. Python多线程爬取斗图啦表情包

    斗图啦表情包多线程爬取-撸代码 首先快速的导入我们需要的模块,和其他文章不同,我把相同的表情都放在了同一个文件夹下面,所以需要导入os模块 import asyncio import aiohttp ...

最新文章

  1. python打印进度条
  2. Linux内核BPF学习1
  3. erlang精要(14)-列表(1)
  4. NODE安装N管理出错
  5. 微软推出 Xbox 漏洞奖励计划,最高奖励2万美元
  6. Python+OpenCV:色彩空间转换
  7. android 悬浮按钮 功能实现,Android自定义悬浮按钮效果实现,带移动效果
  8. 我国启动新型数据保护密码算法研究
  9. 蓝桥杯省赛2020 成绩统计
  10. STVP提示The device is protected解决方法
  11. Marlin固件 ---- G_Code 命令解析
  12. 彻底清理该死的搜狗输入法
  13. little-endian java_Little-Endian的JAVA
  14. 最简单的解释 webdriver的工作原理
  15. android 标签开源控件,Android开源控件ViewPager Indicator的使用方法
  16. 电脑开机显示“被调用的对象已与其客户端断开连接”解决方法
  17. js取得当前url,javascript获取当前页面url值,js获取域名
  18. 水仙花数的实现(python)
  19. 14岁萝莉自学编程独立开发游戏
  20. Jenkins-Slave分布式架构搭建

热门文章

  1. 乐观复制算法-9.扩展乐观复制系统
  2. Java 常见笔试题(转载)
  3. 计算机基础是公共必修课,计算机公共必修课《大学计算机基础》课程教学大纲.doc...
  4. 【Java开发】Java实现调用微信机器人,发送企业微信通知
  5. 微信王者抢先服是什么服务器,王者荣耀抢先服是什么?王者荣耀抢先服介绍
  6. 牛客网之SQL---持续更新
  7. R语言统计入门第四章描述性统计和图形——4.6表格的图形显示
  8. Android Label 标签
  9. 《重构》经典句子摘录,程序员读过后一定有收获
  10. 动作游戏(ACT)——棱角战士(基于Unity3D 5.4.2)