您当前的位置: 首页 >  Python

鱼儿-1226

暂无认证

  • 2浏览

    0关注

    1100博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python爬虫----抓取豆瓣电影Top250

鱼儿-1226 发布时间:2020-08-24 14:35:34 ,浏览量:2

有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息。

1.观察url

首先观察一下网址的结构 http://movie.douban.com/top250?start=0&filter=&type= :

可以看到,问号?后有三个参数 start、filter、type,其中start代表页码,每页展示25部电影,0代表第一页,以此类推25代表第二页,50代表第三页...

filter顾名思义,是过滤已经看过的电影,filter和type在这里不重要,可以不管。

2.查看网页源代码

打开上面的网址,查看源代码,可以看到信息的展示结构如下:

复制代码

 1 
    2
  1. 3
    4
    5 1 6 7 8 9
    10
    11
    12 13 肖申克的救赎 14  / The Shawshank Redemption 15  / 月黑高飞(港) / 刺激1995(台) 16 17 18 19 [可播放] 20
    21
    22

    23 导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /... 24 1994 / 美国 / 犯罪 剧情 25

    26 27 28
    29 9.6 30  646374人评价 31
    32 33

    34 希望让人自由。 35

    36
    37
    38
    39

复制代码

其中1代表排名,肖申克的救赎代表电影名,其他信息的含义也很容易能看出来。

于是接下来可以写正则表达式:

复制代码

 1 pattern = re.compile(u'.*?.*?'
 2                              + u'(.*?).*?'
 3                              + u'.*?(.*?)'
 4                              + u'.*?(.*?).*?'
 5                              + u'(.*?).*?.*?'
 6                              + u'.*?.*?'
 7                              + u'导演: (.*?)   '
 8                              + u'主演: (.*?)'
 9                              + u'(.*?) / (.*?) / '
10                              + u'(.*?)

' 11 + u'.*?.*?(.*?)' 12 + u'.*?(.*?)人评价.*?.*?' 13 + u'(.*?).*?

', re.S)

复制代码

在此处flag参数re.S代表多行匹配。

3.使用面向对象的设计模式编码

代码如下:

复制代码

 1 # -*- coding:utf-8 -*-
 2 __author__ = 'Jz'
 3 import urllib2
 4 import re
 5 import sys
 6 
 7 class MovieTop250:
 8     def __init__(self):
 9         #设置默认编码格式为utf-8
10         reload(sys)
11         sys.setdefaultencoding('utf-8')
12         self.start = 0
13         self.param = '&filter=&type='
14         self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
15         self.movieList = []
16         self.filePath = 'D:/coding_file/python_file/File/DoubanTop250.txt'
17     
18     def getPage(self):
19         try:
20             URL = 'http://movie.douban.com/top250?start=' + str(self.start)
21             request = urllib2.Request(url = URL, headers = self.headers)
22             response = urllib2.urlopen(request)
23             page = response.read().decode('utf-8')
24             pageNum = (self.start + 25)/25
25             print '正在抓取第' + str(pageNum) + '页数据...' 
26             self.start += 25
27             return page
28         except urllib2.URLError, e:
29             if hasattr(e, 'reason'):
30                 print '抓取失败,具体原因:', e.reason
31     
32     def getMovie(self):
33         pattern = re.compile(u'.*?.*?'
34                              + u'(.*?).*?'
35                              + u'.*?(.*?)'
36                              + u'.*?(.*?).*?'
37                              + u'(.*?).*?.*?'
38                              + u'.*?.*?'
39                              + u'导演: (.*?)   '
40                              + u'主演: (.*?)'
41                              + u'(.*?) / (.*?) / '
42                              + u'(.*?)

' 43 + u'.*?.*?(.*?)' 44 + u'.*?(.*?)人评价.*?.*?' 45 + u'(.*?).*?

', re.S) 46 while self.start
关注
打赏
1604459285
查看更多评论
立即登录/注册

微信扫码登录

0.0474s