今天上午开始学了学爬虫技术。下午开始着手写了第一个网站爬虫脚本。
这次我要爬的是随手找的一个主要是妹子图片的网站,目标是把其中一个分类下的所有妹子套图都爬下来(附网址:http://www.dazui88.com/tag/toutiao/list_130_1.html)
老司机们应该知道,一套图一般都有几十张,但这类网站一般一页只会放出一张或者几张,这样一来我们浏览图片时的观感就会大大下降,
因此一次把图片全都爬下来会方便的多。
我们最终 所实现的效果如下,其中每一个文件夹里都是一套图片:

实现时的技术要求与难点:
总的老说目前做的还比较粗糙,但完全够用,主要是拿来练练手。
1.本想以每套图片的名字作为文件夹,但是由于中文有乱码,暂时未实现;
2.下载图片使用的还是requests库,貌似 beautifulsoup库会更好一点,但暂未尝试;
3.由于并没有编写多线程,以及缓冲池之类的,速度会比较慢,但还可以接受;
4.脚本存在一定问题,如果网站其中一张图片丢失,该套图片的剩下部分会被跳过,可解决,但暂未解决;
5.脚本还可以做成软件的形式,但较耗时,有空再说;
6.由于此次爬取的网站其他版块的url结构基本一致,所以花上几秒钟改一下,就能很快爬取其他的图片,甚至整个站所有的图片,但是速度有待改进。
代码实现:
#-*- coding:utf-8 -*-
import pprint,re,urllib,pprint,os,requests,chardet
def urllink(link):
response=requests.get(link)
return response.text
# def htmltype(html):
# mychar=chardet.detect(html)
# bianma=mychar[‘encoding‘]
# if bianma==‘utf-8‘ or bianma==‘UTF-8‘:
# return html
# else:
# return html.decode(‘gb2312‘,‘ignore‘).encode(‘utf-8‘)
def spider():
m=1
for i in range(1,11):
link1="http://www.dazui88.com/tag/toutiao/list_130_%d.html"%i
html=urllink(link1)
# html=htmltype(html)
plist=re.findall("<p>.*?</p>",html,re.S)
for j in plist:
href = ‘http://www.dazui88.com‘ + re.search(‘href="(.*?).html‘, j).group(1)
#label = (re.findall(‘alt="(.*?)"‘,j,re.S))[0]
#os.mkdir(os.path.join(r‘D:\pachong\toutiao‘,label))
if not os.path.exists(r‘D:\pachong\toutiao\%s‘%str(m)):
os.mkdir(os.path.join(r‘D:\pachong\toutiao‘,str(m)))
for k in range(1,100):
try:
hrefnew=href
if k is not 1:
hrefnew=href+‘_%d‘%k
hrefnew+=‘.html‘
print(hrefnew)
html2=urllink(hrefnew)
picurl=re.findall(‘img alt.*?src="(.*?)"‘,html2)[0]
print(picurl)
retu=requests.get(picurl,stream=True)
file=open(r‘D:\pachong\toutiao\%s\%s‘%(str(m),str(k))+‘.jpg‘,‘wb‘)
for chunk in retu.iter_content(chunk_size=10000):
if chunk:
file.write(chunk)
file.flush()
file.close()
except:
break
m+=1
if __name__=="__main__":
spider()
原文:http://www.cnblogs.com/lomooo/p/6359243.html