#-*- coding: utf-8 -* | |
import urllib | |
import urllib2 | |
import re | |
import time | |
import sys | |
#解决中文报错 | |
reload(sys) | |
sys.setdefaultencoding('utf-8') | |
#HuoQ = 'http://www.douban.com/group/haixiuzu/?ref=sidebar' | |
### 代理模块(全局代理) | |
print '#'*50 | |
print '本程序主要采集豆瓣<请不要害羞>小组的图片' | |
print '#'*50 | |
print '采集前需要输入代理服务器地址,这样可以防止被豆瓣屏蔽.' | |
print '推荐一个代理地址: http://cn-proxy.com/' | |
print '只需要输入服务器地址以及端口号,不需要输入http' | |
print '例子:127.0.0.1:8080' | |
print '#'*50 | |
proxy_input = raw_input('请输入采集代理服务器:') | |
proxy_handler = urllib2.ProxyHandler({'http':'%s'%proxy_input}) | |
opener = urllib2.build_opener(proxy_handler) | |
urllib2.install_opener(opener) | |
#采集本地路径全局变量 | |
#img_LuJ = raw_input("路径:") | |
#/home/o21/文档/PythonEX/Doubanimg | |
#设置UserAgent | |
#req = urllib2.Request(HuoQ) | |
#req.add_header('User-Agent','Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36') | |
#reader = urllib2.urlopen(req) | |
#输出 | |
#print reader.read() | |
#模块化输出 | |
#获取帖子单页html | |
def gethtml2(url2): | |
html2 = urllib2.urlopen(url2).read().decode('utf-8') | |
return html2 | |
#抽取图片并下载列表 | |
def gettoimg(html2): | |
#添加正则 匹配url路径数字 d+代表获取0-9无限循环\转义符号 | |
reg2 = r'http://www.douban.com/group/topic/\d+' | |
toplist = re.findall(reg2,html2) | |
x = 0 | |
#限制下载图片数量 | |
#输出topicurl 每次输出一个 的循环 | |
for topicurl in toplist: | |
x+=1 | |
return topicurl | |
#下载图片到本地 | |
def download(topic_page): | |
#获取贴内图片 正则 ".+\" .匹配任意字符 + 匹配前一个字符或无限次 \ 转移符号 也就是 匹配所有字符 | |
reg3 = r'http://img3.douban.com/view/group_topic/large/public/.+\.jpg' | |
imglist = re.findall(reg3,topic_page) | |
i = 1 | |
download_img = None | |
for imgurl in imglist: | |
#取图片id为文件名 | |
img_numlist = re.findall(r'p\d{7}',imgurl) | |
for img_num in img_numlist: | |
download_img = urllib.urlretrieve(imgurl,'/home/o21/文档/PythonEX/Doubanimg/%s.jpg'%img_num) | |
time.sleep(1) | |
i+=1 | |
print (imgurl) | |
return download_img | |
page_end = int(input('请输入采集页码数:')) | |
num_end = page_end*25 | |
num = 0 | |
page_num = 1 | |
while num<=num_end: | |
#获取页面数 从 0 开始 | |
html2 = gethtml2('http://www.douban.com/group/haixiuzu/discussion?start=%d'%num) | |
#抽取下载图片 | |
topicurl = gettoimg(html2) | |
topic_page = gethtml2(topicurl) | |
download_img=download(topic_page) | |
# download_img = download(topic_page) | |
num = page_num*25 | |
page_num+=1 | |
else: | |
print('程序采集完成') |
![]() |
1
O21 OP =,= 写的有点乱。。新手,,请各位海涵~~
|
2
77421 2014-07-14 22:09:11 +08:00
用正则。。
|
![]() |
4
izoabr 2014-07-14 22:16:16 +08:00
为什么是3个引号?
|
5
Fotix 2014-07-14 22:18:27 +08:00
一看就是抓晒组的,果不其然
|
![]() |
6
O21 OP |
![]() |
8
paulw54jrn 2014-07-14 22:27:16 +08:00
@O21
错误: IOError: [Errno 2] No such file or directory: u'/home/o21/\u6587\u6863/PythonEX/Doubanimg/p1616253.jpg' 检查下Unicode的问题 |
![]() |
9
O21 OP @izoabr 我这样写了。
img_LuJ = raw_input("路径:".decode('utf-8')) download_img = urllib.urlretrieve(imgurl,img_LuJ + '/%s.jpg'%img_num) 然后报错 IOError: [Errno 2] No such file or directory: u'/home/o21/img/p1611237.jpg' |
![]() |
10
paulw54jrn 2014-07-14 22:30:24 +08:00
把下载路径改成 '/tmp/%s.jpg' % img_num 用做测试的话,程序可以跑起来
paul@PaulMBP:~/Desktop$ ipython test.py ################################################## 本程序主要采集豆瓣<请不要害羞>小组的图片 ################################################## 采集前需要输入代理服务器地址,这样可以防止被豆瓣屏蔽. 推荐一个代理地址: http://cn-proxy.com/ 只需要输入服务器地址以及端口号,不需要输入http 例子:127.0.0.1:8080 ################################################## 请输入采集代理服务器:121.10.120.135:8001 请输入采集页码数:1 http://img3.douban.com/view/group_topic/large/public/p16112371.jpg http://img3.douban.com/view/group_topic/large/public/p16112380.jpg 程序采集完成 |
![]() |
11
O21 OP @paulw54jrn 我这次木有用中文,也报错。。我楼上写了。。 很郁闷。
|
![]() |
12
paulw54jrn 2014-07-14 22:39:10 +08:00
这样试试?
file = "/home/o21/img/%s.jpg" % img_num try: download_img = urllib.urlretrieve(imgurl,file) except IOError: os.mkdir(file.[:file.rfind("/")]) |
![]() |
13
paulw54jrn 2014-07-14 22:39:46 +08:00
唔..偷懒没用gist..
缩进乱了..不过你懂的.. |
![]() |
14
kawaiiushio 2014-07-15 03:04:34 +08:00
求成品分享
|
![]() |
15
O21 OP @kawaiiushio 在这里下载吧 HOHO http://162.244.92.122/DouBanMZ.zip
|
![]() |
16
WhyLiam 2014-07-15 07:55:24 +08:00
和我一样,我也前天写了抓 害羞组 图片的程序。同道中人啊
但是写的比你简单多了。。。 已经抓了近1700页了 |
17
eslizn 2014-07-15 08:01:55 +08:00
我是来看害羞组的
|
![]() |
18
xavierskip 2014-07-15 08:32:50 +08:00
|
![]() |
19
puyo 2014-07-15 10:15:15 +08:00
可以加入多线程,速度要快一些。
|
![]() |
20
dingyaguang117 2014-07-15 10:34:53 +08:00
至少 socket 的timeout 要加吧,不然死都不知道怎么死的
|
![]() |
21
sujin190 2014-07-15 11:28:10 +08:00
看来写过多注释也有不利的时候。。
|
![]() |
22
shyrock 2014-07-15 22:27:19 +08:00
请教解决中文报错那段是啥意思?
|
23
horizon 2014-08-01 11:31:46 +08:00
为什么要用代理?在header里直接加入cookies就可以了啊
|