我有一个朋友,喜欢在一个图站看图(xie)片(zhen),光看就算了,他还有收集癖,想把网站的所有图片都下载下来,于是找我帮忙。
本业余玩家经过【好久的】研究,终于实现,写成本教程。本人经济学专业,编程纯属玩票,不足之处请指出,勿喷,谢谢。
本文分两部分:第一部分是基础方法,也就是单线程下爬图片的流程;第二部分是使用了多线程的功能,大大提高了爬取的效率。
前言
本次爬取基于的是BeautifulSoup+urllib/urllib2模块,Python另一个高效的爬虫模块叫Scrapy,但是我至今没研究懂,因此暂时不用。
基础流程
说明
此次爬取,在输入端仅需要一个初始网址(为避免彼网站找我麻烦,就以URL
代替),以及文件保存路径(为保护我隐私,以PATH
代替),大家在阅读代码时敬请注意。
从该网站下载图片以及文件处理有如下几步:【我要是会画流程图就好了】
1.打开网站首页,获得总页数,获得每个专辑的链接;
2.点进某专辑,获得专辑的标题作为保存的文件夹名,并获得该专辑的页数;
3.获取每个图片的链接
4.下载图片,以网站上图片的文件名保存至本地,同时对应第2步的文件夹。
代码和解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# -*- coding: utf-8 -*- """ @author: Adam """ import urllib2, urllib, os from bs4 import BeautifulSoup root = PATH url = URL req = urllib2.Request(url) content = urllib2.urlopen(req).read() soup = BeautifulSoup(content, "lxml") page = soup.find_all('a') pagenum1 = page[-3].get_text() #注1 for i in range(0, int(pagenum1) + 1): if i == 0: url1 = URL else: url1 = URL + str(i+1) + ".html" #注2 req1 = urllib2.Request(url1) # #print url content1 = urllib2.urlopen(req1).read() soup1 = BeautifulSoup(content1, "lxml") table = soup1.find_all('td') title = soup1.find_all('div', class_ = 'title') #注3 #print title for j in range(1, 19): folder = title[j-1].get_text() folder = folder.replace('\\\\n', '') #注4 curl=table[j].a['href'] #注5 purl = URL+curl #Second Page preq = urllib2.Request(purl) pcontent = urllib2.urlopen(preq).read() psoup = BeautifulSoup(pcontent, "lxml") page2 = psoup.find_all('a') pagenum2 = page2[-4].get_text() if not os.path.exists(root + folder): os.mkdir(root + folder) else: os.chdir(root + folder) #print folder for t in range(1, int(pagenum2) + 1): if t == 1: purl1 = purl else: purl1 = purl[:-5] + '-' + str(t) + '.html' preq2 = urllib2.Request(purl1) pcontent2 = urllib2.urlopen(preq2).read() psoup2 = BeautifulSoup(pcontent2, "lxml") picbox = psoup2.find_all('div', class_ = 'pic_box') #注6 for k in rangeass="crayon-h"> #注6 for k in range法,也就是单线程下爬图片的流程;第二部分是使用了多线程的功能,大大提高了爬取的效率。
前言本次爬取基于的是BeautifulSoup+urllib/urllib2模块,Python另一个高效的爬虫模块叫Scrapy,但是我至今没研究懂,因此暂时不用。 基础流程说明此次爬取,在输入端仅需要一个初始网址(为避免彼网站找我麻烦,就以 代码和解释
|