3.win10 下 python3 爬虫美女图片逐步优化(多线程版本)

本贴最后更新于 2003 天前,其中的信息可能已经时过境迁
# coding: utf-8 import re import os import time import threading from multiprocessing import Pool, cpu_count import requests from bs4 import BeautifulSoup HEADERS = { 'X-Requested-With': 'XMLHttpRequest', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36', 'Referer': 'http://www.mzitu.com' } save_path='D:\data\crawl\meizitujk\\' base_url = 'http://m.772586.com' lock = threading.Lock() # 全局资源锁 def urls_crawler_index(url): """ 爬虫入口,主要爬取操作 """ try: html = requests.get(url, headers=HEADERS, timeout=50) html.encoding = 'utf-8' soup = BeautifulSoup(html.text, "lxml", from_encoding='utf-8') tags =soup.find('ul',class_='tag').find_all('li') allIndexList = [] allIndexList.append(base_url+'/meinv/') allIndexList.append(base_url+'/mxmn/') for tag in tags: print tag.find('a')['href'] allIndexList.append(base_url+tag.find('a')['href']) print "========" for index_detail_url in allIndexList: urls_crawler_index_list(index_detail_url) except Exception as e: print(e) def urls_crawler_index_list(index_url): """ 爬虫入口,主要爬取操作 """ try: html = requests.get(index_url, headers=HEADERS, timeout=10) html.encoding = 'utf-8' soup = BeautifulSoup(html.text, "lxml", from_encoding='utf-8') max_page_txt = soup.find('div',class_='page').find('a',class_='allpage').text max_page=max_page_txt[max_page_txt.rfind('/')+1:] max_page=int(max_page) print(max_page) for xxx_page in xrange(max_page): if 0==xxx_page: craw_content_page_url=index_url+'index.html' else: craw_content_page_url = index_url + 'index_' + str(xxx_page+1) + '.html' html_content_page = requests.get(craw_content_page_url, headers=HEADERS, timeout=10) html_content_page.encoding = 'utf-8' soup_content_page = BeautifulSoup(html_content_page.text, "lxml", from_encoding='utf-8') index_page_details =soup_content_page.find('div',id='list').find('ul').find_all('li') detail_urls=[] for page_url_li in index_page_details: detail_crawl_url = base_url + page_url_li.find('a')['href'] print("detail_crawl_url:" + detail_crawl_url) detail_urls.append(detail_crawl_url) try: pool.map(urls_crawler_page, detail_urls) except Exception: time.sleep(30) pool.map(urls_crawler_page, detail_urls) except Exception as e: print(e) def urls_crawler_page(url): """ 爬虫入口,主要爬取操作 """ try: response = requests.get(url, headers=HEADERS, timeout=50) response.encoding = 'utf-8' r=response.text folder_name = BeautifulSoup(r, 'lxml').find( 'div', class_="contimglist").find('img')['alt'].replace("?", " ") print(folder_name) with lock: # 套图里图片张数 max_count = BeautifulSoup(r, 'lxml').find( 'div', class_='page').find_all( 'span')[0].next_sibling[1:] page_urls = [] for i in range(1, int(max_count) + 1): if i==1: page_urls.append(url[0:url.rfind('.html')] +'.html') else: page_urls.append(url[0:url.rfind('.html')] +'_'+str(i)+'.html') url_detail_crawler(page_urls,folder_name) except Exception as e: print(e) def url_detail_crawler(page_urls,folder_name): img_urls = [] for i,page_url in enumerate(page_urls): time.sleep(0.25) result = requests.get(page_url, headers=HEADERS, timeout=10).text img_url = BeautifulSoup(result, 'lxml').find( 'div', class_="contimglist").find('a').find('img')['src'] img_urls.append(img_url) for cnt, url in enumerate(img_urls): save_pic(url, cnt,folder_name) def save_pic(pic_src, pic_cnt,folder_name): """ 保存图片到本地 """ try: time.sleep(0.10) base_path = save_path + folder_name if not os.path.isdir(base_path): os.mkdir(base_path) img = requests.get(pic_src, headers=HEADERS, timeout=10) img_name = base_path+"\\"+"pic_cnt_{}.jpg".format(pic_cnt + 1) with open(img_name, 'ab') as f: f.write(img.content) print(img_name) except Exception as e: print(e) if __name__ == "__main__": # urls = ['http://m.772586.com/qingchun/17454.html'] # pool = Pool(processes=cpu_count()) # try: # pool.map(urls_crawler_page, urls) # except Exception: # time.sleep(30) # pool.map(urls_crawler_page, urls) #测试 # # urls_crawler(url) # page_urls=['http://m.772586.com/qingchun/17454_2.html'] # urls_crawler(page_urls) #从首页开始 pool = Pool(processes=10) urls = 'http://m.772586.com/' urls_crawler_index(urls)
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    171 引用 • 513 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖 • 1 关注
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    167 引用 • 595 回帖 • 1 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    167 引用 • 3832 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    24526 引用 • 100379 回帖
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 566 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 415 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 721 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 90 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    88 引用 • 1235 回帖 • 406 关注
  • 博客

    记录并分享人生的经历。

    273 引用 • 2388 回帖
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖 • 2 关注
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 292 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 488 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 22 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖 • 1 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 639 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 209 关注
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    54 引用 • 37 回帖 • 1 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 248 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 4 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 408 回帖 • 486 关注
  • AngularJS

    AngularJS 诞生于 2009 年,由 Misko Hevery 等人创建,后为 Google 所收购。是一款优秀的前端 JS 框架,已经被用于 Google 的多款产品当中。AngularJS 有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等。2.0 版本后已经改名为 Angular。

    12 引用 • 50 回帖 • 497 关注
  • 安全

    安全永远都不是一个小问题。

    203 引用 • 816 回帖