例如:
# -*- coding: utf-8 -*-
import requests
import re
for i in range(5000,5484):
url = 'http://www.meizitu.com/a/'+str(i)+'.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Linux;u;Android 4.2.2;zh-cn;) AppleWebKit/534.46 (KHTML,like Gecko) Version/5.1 Mobile Safari/10600.6.3 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
}
r = requests.get(url, headers=headers)
r.encoding = 'gb2312'
par = re.compile('<img alt="(.*?)" src="(.*?)" /><br />', re.S)
items = re.findall(par, r.text)
for item in items:
print item[0], item[1]
down = requests.get(item[1], headers=headers)
with open('img3/%s.jpg' % item[0], 'wb') as f:
f.write(down.content)
for迭代产生的数据 比解析下载的速度快造成堵塞
主要讲讲方法不局限示例代码。
io操作肯定是要比正常的操作的慢的。
提供一下我的思路,首先我觉得多线程或者多进程不合适。可以将解析和下载抽象为两个方法,两者通过消息队列通信,这就是生产者消费者模型。如果你的的程序小到实现消息队列太复杂,可以先运行解析函数,将解析后的url写入一个文本,数据库或者干脆在内存维护一个列表,完成之后再启动下载函数,从文本,数据库或则列表读取参数。