想测试一下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 抓取“煎蛋妹子图”并分页存在本地(普通版和多线程版)相关推荐

  1. 用Python爬虫抓取煎蛋(jandan.net)无聊图和妹子图

    用Python爬虫抓取煎蛋(jandan.net)无聊图和妹子图,有需要的朋友可以参考下. 初学Python, 练手写了个程序 通过Python爬虫抓取煎蛋无聊图和妹子图,存储到本地硬盘 使用了pyq ...

  2. Python 爬取煎蛋妹子图

    煎蛋妹子图网站 最近一直在通过爬虫的练习,来巩固自己的所学习到的 python 基础,和爬虫一些框架的使用.今天的程序就是最近在学习的 selenium 库,通过利用 requests + beaut ...

  3. 使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

    第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到"煎蛋网xxoo"网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保 ...

  4. python爬取煎蛋网妹子图

    看了小甲鱼的python教学视频,爬取煎蛋网妹子图的代码已经不适用了,网上其它人的代码多有报错,本萌新结合其他人的方法,终于写出一个可行的,在此分享_(:з)∠)_(运行非常慢就是了) import ...

  5. python爬虫保存图片到指定文件夹_李亚涛:python抓取某房源户型图并自动保存到文件夹...

    大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...

  6. 李亚涛:python抓取某房源户型图并自动保存到文件夹

    大家好,今天来给大家分享一下如何抓取某房产网站房源户型图的所有图片,而且自动以房源名称命名一个文件夹,把所有图片放到文件夹中. 大概的思路是: 1.获取网页源代码 2.获取图片地址与房源名称 3.在当 ...

  7. python爬取煎蛋美眉

    闲来无事,利用python写了个爬虫,爬取煎蛋的美眉.不要问我为什么不爬取淘宝的,大家都是男人,煎蛋上面的美眉质量普遍比其他地方高啊有木有?说正经的,也算是对爬虫一些基本的库的一个总结吧.一如既往,我 ...

  8. [Python] 抓取必应每日一图,设置为桌面壁纸

    在Windows 10 64位系统环境下,使用 Python 3.6 进行图片抓取和设置壁纸操作. 其中,图片链接 https://area.sinaapp.com/bingImg/ 为 Bing 每 ...

  9. python 爬取煎蛋网妹子的图片

    昨晚跑完步,回家看了点小甲鱼的python视频,讲了点爬虫相关知识,于是今天兴致来了,尝试自己写写看,晚上再回去看看他是怎么实现的. 写的过程中发现对于正则表达式这块真是个坑,很多时候都我都是将一些u ...

最新文章

  1. zabbix搭建并结合mikoomi插件监控hadoop集群
  2. why quantity change in item can cause CUMULAT_H changed as well
  3. 从0开始学习自动化测试框架cypress(一)
  4. -webkit-有意思的属性
  5. 【安全风险通告】Apache ShardingSphere远程代码执行漏洞安全风险通告
  6. SQL中SELECT INTO和INSERT INTO SELECT语句介绍
  7. C# ado.net数据库连接池,使用长连接访问数据库
  8. RS485协议和Modbus协议有什么区别?工业网关能用吗?
  9. 易语言API HOOK DeviceIOControl修改磁盘序列号
  10. C语言---学生奖学金评定系统设计
  11. PostgreSQL数据库学习手册之大对象
  12. 传真百科:雷雨天对传真通讯有影响吗
  13. 失业登记对养老保险是否有影响
  14. 【信号去噪】基于NLM时间序列心电信号去噪附matlab代码
  15. win10 系统重装 (官方纯净版,无预置应用)
  16. ES6入门--let的基本使用
  17. 个税报税服务器证书不合法,【问答】本月个税申报,这4个问题一定要搞清楚!...
  18. 《王道》数据结构之绪论(一)
  19. oracle mysql认证考试流程_报考oraclemysql认证考试的流程是什么
  20. 高并发高流量的大型网站架构设计

热门文章

  1. leetcode第一题两数相加
  2. 电路基础知识 -- 三态
  3. hdu1597(二分)
  4. 反卷积在神经网络可视化上的成功应用
  5. php 中国标准时间,linux 系统时间与硬件时间与中国标准时间
  6. mariadb mysql同步_CentOS7安装配置MariaDB(mysql)数据主从同步
  7. python打架动态图_20个GIF动图解释令程序员崩溃的瞬间 - 里维斯社
  8. JZOJ 5662. 【GDOI2018Day1模拟4.17】尺树寸泓
  9. JZOJ 5459. 【NOIP2017提高A组冲刺11.7】密室
  10. c#和c++中枚举类型的区别(简)