Python抓取豆瓣电影排行榜

2024-05-18 08:14

1. Python抓取豆瓣电影排行榜

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          3              4                  5                     1 6                      7                          8                      9                 10                 11                     12                         13                             肖申克的救赎14                                      / The Shawshank Redemption15                                  / 月黑高飞(港)  /  刺激1995(台)16                         17 18 19                             [可播放]20                     21                     22                         23                             导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /...24                             1994 / 美国 / 犯罪 剧情25                         26 27                         28                         29                                 9.630                                  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-810         reload(sys)11         sys.setdefaultencoding('utf-8')12         self.start = 013         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)/2525             print '正在抓取第' + str(pageNum) + '页数据...' 26             self.start += 2527             return page28         except urllib2.URLError, e:29             if hasattr(e, 'reason'):30                 print '抓取失败,具体原因:', e.reason31     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 <= 225:47             page = self.getPage()48             movies = re.findall(pattern, page)49             for movie in movies:50                 self.movieList.append([movie[0], movie[1], movie[2].lstrip(' / '), 
51                       movie[3].lstrip(' / '), movie[4], 
52                       movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),53                       movie[9], movie[10], movie[11]])54     55     def writeTxt(self):56         fileTop250 = open(self.filePath, 'w')57         try:58             for movie in self.movieList:59                 fileTop250.write('电影排名:' + movie[0] + '\r\n')60                 fileTop250.write('电影名称:' + movie[1] + '\r\n')61                 fileTop250.write('外文名称:' + movie[2] + '\r\n')62                 fileTop250.write('电影别名:' + movie[3] + '\r\n')63                 fileTop250.write('导演姓名:' + movie[4] + '\r\n')64                 fileTop250.write('参与主演:' + movie[5] + '\r\n')65                 fileTop250.write('上映年份:' + movie[6] + '\r\n')66                 fileTop250.write('制作国家/地区:' + movie[7] + '\r\n')67                 fileTop250.write('电影类别:' + movie[8] + '\r\n')68                 fileTop250.write('电影评分:' + movie[9] + '\r\n')69                 fileTop250.write('参评人数:' + movie[10] + '\r\n')70                 fileTop250.write('简短影评:' + movie[11] + '\r\n\r\n')71             print '文件写入成功...'72         finally:73             fileTop250.close()74     75     def main(self):76         print '正在从豆瓣电影Top250抓取数据...'77         self.getMovie()78         self.writeTxt()79         print '抓取完毕...'80 81 DouBanSpider = MovieTop250()82 DouBanSpider.main()

代码比较简单,最后将信息写入一个文件,没有什么需要解释的地方。

Python抓取豆瓣电影排行榜

2. 用python3爬豆瓣电影第一页的电影名称、时长、评分

百度知道上怎么可能有人回答这种小白的问题,你如果这样根本学不会编程的,学编程最重要的是学会利用搜索引擎而不是问别人,很多你碰到过的问题都是前人碰过的了,我敢说你到百度搜一下你这个问题博客文章不下10篇,既不想看,怎么可能学会呢,不用指望有人回答这个问题了

3. 求一份Python爬取豆瓣影评数据集,多部电影,多影评的,哎

这种类型的

求一份Python爬取豆瓣影评数据集,多部电影,多影评的,哎

4. 怎样用python爬取豆瓣电影

在开发者工具中观察到该请求的Status Code是302,Response Headers中Location是该预告片的真正地址(该地址是时间的函数,不唯一!
但测试表明不同时间生成的不同的地址都能下载该预告片!

5. Python爬虫如何抓取豆瓣影评中的所有数据?

你可以用前嗅爬虫采集豆瓣的影评,我之前用的,还可以过滤只采集评分在6分以上的所有影评,非常强大,而且他们软件跟数据库对接,采集完数据后,直接入库,导出excel表。很省心。

Python爬虫如何抓取豆瓣影评中的所有数据?

6. python怎么爬豆瓣top250电影beautifulsoup

这不是报错 这是代码不兼容产生的 警告提示换一下写法就可以了#bsObj = BeautifulSoup(html)bsObj = BeautifulSoup(html, "lxml")

7. 如何用Python在豆瓣中获取自己喜欢的TOP N


如何用Python在豆瓣中获取自己喜欢的TOP N

8. python怎么抓取豆瓣电影url

#!/usr/bin/env python2.7# encoding=utf-8"""
爬取豆瓣电影TOP250 - 完整示例代码
"""import codecsimport requestsfrom bs4 import BeautifulSoup

DOWNLOAD_URL = 'httn.com/top250/'def download_page(url):
return requests.get(url, headers={        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}).contentdef parse_html(html):
soup = BeautifulSoup(html)
movie_list_soup = soup.find('ol', attrs={'class': 'grid_view'})

movie_name_list = []    for movie_li in movie_list_soup.find_all('li'):
detail = movie_li.find('div', attrs={'class': 'hd'})
movie_name = detail.find('span', attrs={'class': 'title'}).getText()

movie_name_list.append(movie_name)

next_page = soup.find('span', attrs={'class': 'next'}).find('a')    if next_page:        return movie_name_list, DOWNLOAD_URL + next_page['href']    return movie_name_list, Nonedef main():
url = DOWNLOAD_URL    with codecs.open('movies', 'wb', encoding='utf-8') as fp:        while url:
html = download_page(url)
movies, url = parse_html(html)
fp.write(u'{movies}\n'.format(movies='\n'.join(movies)))if __name__ == '__main__':
main()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

简单说明下,在目录下会生成一个文档存放电影名。python2