码迷,mamicode.com
首页 > Web开发 > 详细

用urllib2实现简单的网络爬虫1

时间:2016-05-06 00:08:52      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

  玩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

 

用urllib2实现简单的网络爬虫1

标签:

原文地址:http://www.cnblogs.com/haigege/p/5456816.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!