python 抓取“煎蛋妹子图”并分页存在本地(普通版和多线程版)
想测试一下python多线程爬虫的效率,就写了个爬虫程序的多线程版和普通版。测试了一下。发现单线程比多线程还快,不理解。看来有两种可能,一是我写的多线程爬虫有问题,二是python对多线程的支持有局限。
暂时存在这里,希望以后能解决。
爬虫单线程版:
1 #coding=utf-8 2 import sys 3 reload(sys) 4 sys.setdefaultencoding('utf-8') 5 6 import requests 7 import re 8 import os 9 from threading import Thread 10 import urllib 11 from time import ctime 12 13 class crawl_girls(object): 14 """docstring for crawl_girls""" 15 def __init__(self, url, pagenum): 16 self.url = url 17 self.pagenum = pagenum 18 self.content = "" 19 self.img_urls = [] 20 self.img_names = [] 21 22 def getContent(self): 23 try: 24 imgs_html = requests.get(self.url) 25 imgs_html_content = imgs_html.content 26 self.content = imgs_html_content 27 #print self.content 28 except requests.exceptions.RequestException, e: 29 print e 30 31 def getImgNames(self): 32 img_names_patt = r'<li id="comment-(.+?)">' 33 self.img_names = re.findall(img_names_patt, self.content) 34 35 def getImgUrls(self): 36 img_urls_patt = r'<p><img src="(.+?)"' 37 self.img_urls = re.findall(img_urls_patt, self.content) 38 39 def start_download(self): 40 self.getContent() 41 self.getImgNames() 42 self.getImgUrls() 43 44 curr_path = os.getcwd() 45 curr_path = curr_path.replace('\\', '/') 46 curr_path = curr_path + '/' 47 file_dir = curr_path + str(self.pagenum) + '/' 48 os.mkdir(file_dir) 49 50 for name_url in zip(self.img_names, self.img_urls): 51 pic_name = name_url[1][-4:] 52 file_path = file_dir + name_url[0] + pic_name 53 #print 'start download',file_path 54 print 'starting at', ctime() 55 urllib.urlretrieve(name_url[1], file_path) 56 print 'finished at', ctime() 57 58 59 def main(page_start, page_end): 60 page = r'http://jandan.net/ooxx/page-1#comments' 61 for pagenum in range(page_start, page_end+1): 62 url = page.replace('1', str(pagenum)) 63 print url 64 girls = crawl_girls(url, pagenum) 65 girls.start_download() 66 67 print "all Done" 68 69 if __name__ == '__main__': 70 main(905, 906)
爬虫多线程版:
1 #coding=utf-8 2 import sys 3 reload(sys) 4 sys.setdefaultencoding('utf-8') 5 6 import requests 7 import re 8 import os 9 from threading import Thread 10 import urllib 11 from time import ctime 12 13 class crawl_girls(object): 14 """docstring for crawl_girls""" 15 def __init__(self, url, pagenum): 16 self.url = url 17 self.pagenum = pagenum 18 self.content = "" 19 self.img_urls = [] 20 self.img_names = [] 21 22 def getContent(self): 23 try: 24 imgs_html = requests.get(self.url) 25 imgs_html_content = imgs_html.content 26 self.content = imgs_html_content 27 #print self.content 28 except requests.exceptions.RequestException, e: 29 print e 30 31 def getImgNames(self): 32 img_names_patt = r'<li id="comment-(.+?)">' 33 self.img_names = re.findall(img_names_patt, self.content) 34 35 def getImgUrls(self): 36 img_urls_patt = r'<p><img src="(.+?)"' 37 self.img_urls = re.findall(img_urls_patt, self.content) 38 39 def start_thread(self): 40 self.getContent() 41 self.getImgNames() 42 self.getImgUrls() 43 44 curr_path = os.getcwd() 45 curr_path = curr_path.replace('\\', '/') 46 curr_path = curr_path + '/' 47 file_dir = curr_path + str(self.pagenum) + '/' 48 os.mkdir(file_dir) 49 50 for name_url in zip(self.img_names, self.img_urls): 51 pic_name = name_url[1][-4:] 52 file_path = file_dir + name_url[0] + pic_name 53 print 'start download',file_path 54 print 'starting at', ctime() 55 thread = download_threads(name_url[1], file_path) 56 thread.start() 57 thread.join() 58 print 'finished at', ctime() 59 60 class download_threads(Thread): 61 def __init__(self, url, path): 62 Thread.__init__(self) 63 self.url = url 64 self.path = path 65 66 def run(self): 67 urllib.urlretrieve(self.url, self.path) 68 69 def main(page_start, page_end): 70 page = r'http://jandan.net/ooxx/page-1#comments' 71 for pagenum in range(page_start, page_end+1): 72 url = page.replace('1', str(pagenum)) 73 print url 74 girls = crawl_girls(url, pagenum) 75 girls.start_thread() 76 77 print "all Done" 78 79 if __name__ == '__main__': 80 main(905, 906)
转载于:https://www.cnblogs.com/lkprof/p/3267039.html
python 抓取“煎蛋妹子图”并分页存在本地(普通版和多线程版)相关推荐
- 用Python爬虫抓取煎蛋(jandan.net)无聊图和妹子图
用Python爬虫抓取煎蛋(jandan.net)无聊图和妹子图,有需要的朋友可以参考下. 初学Python, 练手写了个程序 通过Python爬虫抓取煎蛋无聊图和妹子图,存储到本地硬盘 使用了pyq ...
- Python 爬取煎蛋妹子图
煎蛋妹子图网站 最近一直在通过爬虫的练习,来巩固自己的所学习到的 python 基础,和爬虫一些框架的使用.今天的程序就是最近在学习的 selenium 库,通过利用 requests + beaut ...
- 使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到"煎蛋网xxoo"网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保 ...
- python爬取煎蛋网妹子图
看了小甲鱼的python教学视频,爬取煎蛋网妹子图的代码已经不适用了,网上其它人的代码多有报错,本萌新结合其他人的方法,终于写出一个可行的,在此分享_(:з)∠)_(运行非常慢就是了) import ...
- python爬虫保存图片到指定文件夹_李亚涛:python抓取某房源户型图并自动保存到文件夹...
大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...
- 李亚涛:python抓取某房源户型图并自动保存到文件夹
大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...
- python爬取煎蛋美眉
闲来无事,利用python写了个爬虫,爬取煎蛋的美眉.不要问我为什么不爬取淘宝的,大家都是男人,煎蛋上面的美眉质量普遍比其他地方高啊有木有?说正经的,也算是对爬虫一些基本的库的一个总结吧.一如既往,我 ...
- [Python] 抓取必应每日一图,设置为桌面壁纸
在Windows 10 64位系统环境下,使用 Python 3.6 进行图片抓取和设置壁纸操作. 其中,图片链接 https://area.sinaapp.com/bingImg/ 为 Bing 每 ...
- python 爬取煎蛋网妹子的图片
昨晚跑完步,回家看了点小甲鱼的python视频,讲了点爬虫相关知识,于是今天兴致来了,尝试自己写写看,晚上再回去看看他是怎么实现的. 写的过程中发现对于正则表达式这块真是个坑,很多时候都我都是将一些u ...
最新文章
- zabbix搭建并结合mikoomi插件监控hadoop集群
- why quantity change in item can cause CUMULAT_H changed as well
- 从0开始学习自动化测试框架cypress(一)
- -webkit-有意思的属性
- 【安全风险通告】Apache ShardingSphere远程代码执行漏洞安全风险通告
- SQL中SELECT INTO和INSERT INTO SELECT语句介绍
- C# ado.net数据库连接池,使用长连接访问数据库
- RS485协议和Modbus协议有什么区别?工业网关能用吗?
- 易语言API HOOK DeviceIOControl修改磁盘序列号
- C语言---学生奖学金评定系统设计
- PostgreSQL数据库学习手册之大对象
- 传真百科:雷雨天对传真通讯有影响吗
- 失业登记对养老保险是否有影响
- 【信号去噪】基于NLM时间序列心电信号去噪附matlab代码
- win10 系统重装 (官方纯净版,无预置应用)
- ES6入门--let的基本使用
- 个税报税服务器证书不合法,【问答】本月个税申报,这4个问题一定要搞清楚!...
- 《王道》数据结构之绪论(一)
- oracle mysql认证考试流程_报考oraclemysql认证考试的流程是什么
- 高并发高流量的大型网站架构设计
热门文章
- leetcode第一题两数相加
- 电路基础知识 -- 三态
- hdu1597(二分)
- 反卷积在神经网络可视化上的成功应用
- php 中国标准时间,linux 系统时间与硬件时间与中国标准时间
- mariadb mysql同步_CentOS7安装配置MariaDB(mysql)数据主从同步
- python打架动态图_20个GIF动图解释令程序员崩溃的瞬间 - 里维斯社
- JZOJ 5662. 【GDOI2018Day1模拟4.17】尺树寸泓
- JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
- c#和c++中枚举类型的区别(简)