标签:
玩python的同学都避免不了想写个爬虫玩玩,并且一般都以抓取XX图片为主,当然楼主也不例外~~
这里先用比较原始的方式:urllib2 + 正则表达式,后面再尝试requests
背景:假设有个网站,是关于一些艺术家及其作品介绍的,登陆进去后,每一页是艺术家的头像和名字列表(由于艺术家很多,所以有很多页);
点击艺术家的头像或名字,就进入该艺术家的主页,主页上有该艺术家的详细介绍和作品列表(由于每个艺术家有很多作品,所有可能会有很多页);
点击其中一部作品,就进入该作品的详细介绍页面,包括作品名(I)称(D),封面图像,内容截图。
目标:爬取每一个艺术家的信息和作品,首先建立以艺术家名字命名的文件夹,并将艺术家的信息存入info.txt文件,然后每一部作品创建一个文件夹(以作品名(I)称(D)命名),
最后将作品的封面及内容截图保存到该文件夹内。
思路:1 进入艺术家列表页面,提取出该页面中所有艺术家的名字和其主页的URL,存入dict,key为艺术家名字,value为主页URL;
2 遍历上一步的dict,先创建以艺术家名字命名的文件夹,然后进入艺术家的主页,获取艺术家的详细信息,写入info.txt文件;
3 获取艺术家主页中所有作品的URL,保存在list中;
4 遍历上一步的list,进入某一部作品的详细页面,获取该作品的名(I)称(D),并创建以该名(I)称(D)命名的文件夹;
5 同时获取该作品的封面和内容截图的URL,保存在list中;
6 遍历上一步的list,保存所有图片到本地文件夹中;
7 如果该艺术家有很多页作品,则进入一下页作品列表,重复步骤3-6;
8 该艺术家列表页面的所有艺术家都爬取后,进入下一页艺术家列表,重复步骤1-7.
根据上面的思路,先定义出所需要的类和方法:
1 class Spider(object): 2 def __init__(self, base_url, start_page, end_page, file_path, min_age=20, max_age=35, movie_cnt=50): 3 """ 4 :param base_url: 艺术家列表主页的基地址 5 :param start_page: 起始页面号 6 :param end_page: 终止页面号,不包含此页面 7 :param file_path: 文件保存本地路径 8 :param min_age: 艺术家的最小年龄,小于此年龄的不抓取 9 :param max_age: 艺术家的最大年龄,大于此年龄的不抓取 10 :param movie_cnt: 需要获取的每个艺术家的最大作品数 11 :return: none 12 """ 13 pass 14 15 def get_current_page_actresses_url(self, page): 16 """ 17 获取当前指定页面的所有演员名字和URL 18 :param page: 指定的页面号 19 :return: 一个dict, key为艺术家姓名,value为对应URL 20 """ 21 pass 22 23 def mkdir_for_actress(self, name): 24 """ 25 创建以艺术家名字命名的目录 26 :param name: 艺术家的名字 27 :return: 返回创建的目录路径 28 """ 29 pass 30 31 def get_actress_info(self, path, data): 32 """ 33 获取艺术家的基本信息,将其保存在info.txt文件中 34 :param path: 存放艺术家信息的目录,由mkdir_for_actress返回 35 :param data: 关于该艺术家作品列表的网页HTML 36 :return: 返回艺术家的年龄 37 """ 38 pass 39 40 def has_next_page(self, data): 41 """ 42 判断当前艺术家是否还有下一页作品 43 :param data: 关于该艺术家作品列表的网页HTML 44 :return: 如果存在下一页返回True,否则返回False 45 """ 46 pass 47 48 def get_actress_movies(self, data): 49 """ 50 在艺术家作品页面,获取所有作品列表的URL,保存在list中 51 :param data: 关于该艺术家作品列表的网页HTML 52 :return: 保存该艺术家当前页面作品URL的list 53 """ 54 pass 55 56 def get_id_and_mkdir(self, path, data): 57 """ 58 获取一部作品的ID,并创建以该ID为名称的文件夹 59 :param path: 新创建文件夹所在的目录,由mkdir_for_actress返回 60 :param data: 作品详细信息的网页HTML 61 :return: 返回所创建的文件夹路径 62 """ 63 pass 64 65 def get_pictures(self, data): 66 """ 67 获取一部作品封面和样品图片的URL 68 :param data: 作品详细信息的网页HTML 69 :return: 保存封面和样品图片URL的List 70 """ 71 pass 72 73 def save_pictures(self, path, url_list): 74 """ 75 保存图片到本地指定文件夹 76 :param path: 保存图片的文件夹,由get_id_and_mkdir返回 77 :param url_list: 待保存图片的url列表,由get_pictures返回 78 :return: none 79 """ 80 pass 81 82 def start_spider(self): 83 """ 84 启动爬虫程序,外部只调用该接口 85 :return: none 86 """ 87 pass
标签:
原文地址:http://www.cnblogs.com/haigege/p/5456816.html