今天上午开始学了学爬虫技术。下午开始着手写了第一个网站爬虫脚本。
这次我要爬的是随手找的一个主要是妹子图片的网站,目标是把其中一个分类下的所有妹子套图都爬下来(附网址: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