断断续续谢了一个多星期, 基本上完成了豆瓣的爬虫的编写.

最初还是没有准备使用框架写, 还是准备利用requests获取网页内容然后分析, 后来觉得这么写有点浪费时间, 而且requests是阻塞的, 不便于写多线程的. 另一方面, python爬虫框架Scrapy大名鼎鼎, 不学习一下有点亏, 就决定使用Scrapy来写这个爬虫.

Scrapy

利用Scrapy来写爬虫还是比较方便简单的, 主要的代码都在douban_spider中, 后续处理的代码在pipeline中, setting中还可以设置爬取速率, 是否遵循robot.txt, middleware等内容.

获取的豆瓣信息

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
{'casts': {'1004780': '雷诺·维尔森',
'1017898': '约翰·古德曼',
'1018140': '马克·瑞安',
'1025212': '彼特·库伦',
'1025213': '托马斯·列农',
'1027181': '渡边谦',
'1031825': '弗兰克·维尔克',
'1031847': '凯尔希·格兰莫',
'1031869': '索非亚·迈尔斯',
'1035674': '马克·沃尔伯格',
'1037706': '吕良伟',
'1040517': '斯坦利·图齐',
'1040990': '李冰冰',
'1041214': '罗伯特·福克沃斯',
'1049627': '约翰·迪·玛吉欧',
'1162139': '王敏德 ',
'1165630': '提图斯·维里沃',
'1248294': 'T·J·米勒',
'1274253': '妮可拉·佩尔茨',
'1275106': '纪培慧',
'1275667': '韩庚',
'1312271': '巫刚',
'1326135': '杰克·莱诺',
'1340189': '阿比盖尔·克莱恩',
'1340928': '邹市明'},
'directors': {'1027776': '迈克尔·贝'},
'writers': {'1027468': '伊伦·克鲁格'}

#----------
'rating_better_than': {'动作片': '46', '科幻片': '44'},
'release_date': {'美国/中国大陆': '2014-06-27', '香港首映': '2014-06-19'},
#----------

'movie_aka': ['变形金刚:歼灭世纪(港)', '变形金刚4:灭绝时代', '变形金刚4', '变4', 'Transformers4'],
'movie_tags': ['变形金刚', '科幻', '美国', '动作', '2014', '美国电影', 'Transformers', '电影'],
'movie_country': ['美国', '中国大陆'],
'movie_genre': ['动作', '科幻'],
'movie_language': [ '英语','汉语普通话', '粤语'],
'movie_similar': ['3610047',
'6082518',
'10741834',
'2063914',
'3718424',
'3231742',
'6390823',
'24404677',
'6560058',
'3217149'],
#----------

'movie_id': '7054604',
'movie_imdb_id': 'tt2109248',

'movie_length': '166',
'movie_name': '变形金刚4:绝迹重生 Transformers: Age of Extinction',
'movie_rating': '6.6',
'movie_rating_distribute': ['11.0', '28.4', '43.5', '13.1', '4.1'],
'movie_rating_people_num': '178399',

}

以变形金刚四为例, 数据根据格式主要分成四类:

  1. 导演, 编剧, 演员
  2. 数据格式为map的数据
  3. 数据格式为list的数据
  4. 数据格式为str的数据