Python爬虫-豆瓣电影 Top 250

Posted 我来乔23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫-豆瓣电影 Top 250相关的知识,希望对你有一定的参考价值。

爬取的网页地址为:https://movie.douban.com/top250

打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影。

那么要爬取所有电影的信息,就需要知道另外9个页面的URL链接。

第一页:https://movie.douban.com/top250

第二页:https://movie.douban.com/top250?start=25&filter=  

第三页:https://movie.douban.com/top250?start=50&filter=

以此类推...

 

分析网页源代码:以首页为例

观察后可以发现: 
所有电影信息在一个ol标签之内,该标签的 class属性值为grid_view; 
每个电影在一个li标签里面; 
每个电影的电影名称在:第一个 class属性值为hd 的div标签 下的 第一个 class属性值为title 的span标签里; 
每个电影的评分在对应li标签里的(唯一)一个 class属性值为rating_num 的span标签里; 
每个电影的评价人数在 对应li标签 里的一个 class属性值为star 的div标签中 的最后一个数字; 
每个电影的短评在 对应li标签 里的一个 class属性值为inq 的span标签里。

 

Python主要模块:requests模块  BeautifulSoup4模块

>pip install requests

>pip install BeautifulSoup4

主要代码:

 Top250.py
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
61
62
63
64
65
66
67
68
69
70
71
 
# -*- coding:utf-8 -*-
import requests                             # requests模块
from bs4 import BeautifulSoup               # BeautifulSoup4模块
import re                                   # 正则表达式模块
import time                                 # 时间模块
import sys                                  # 系统模块

"""获取html文档"""
def getHTMLText(url, k):
    
try:
        
if(k == 0):             # 首页
            kw = {}
        
else:                   # 其它页
            kw = {\'start\':k, \'filter\':\'\'}
        r = requests.
get(url, params = kw, headers = {\'User-Agent\'\'Mozilla/4.0\'})
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        
return r.text
    
except:
        
print("Failed!")

"""解析数据"""
def getData(html):
    soup = BeautifulSoup(html, 
"html.parser")
    movieList = soup.
find(\'ol\', attrs = {\'class\':\'grid_view\'})                  # 找到第一个class属性值为grid_view的ol标签
    moveInfo = []
    
for movieLi in movieList.find_all(\'li\'):                                    # 找到所有li标签
        data = []
        
# 得到电影名字
        movieHd = movieLi.find(\'div\', attrs = {\'class\':\'hd\'})                   # 找到第一个class属性值为hd的div标签
        movieName = movieHd.find(\'span\', attrs = {\'class\':\'title\'}).getText()   # 找到第一个class属性值为title的span标签
                                                                                # 也可使用.string方法
        data.append(movieName)

        
# 得到电影的评分
        movieScore = movieLi.find(\'span\', attrs={\'class\':\'rating_num\'}).getText()
        data.
append(movieScore)

        
# 得到电影的评价人数
        movieEval=movieLi.find(\'div\',attrs={\'class\':\'star\'})
        movieEvalNum=re.findall(r
\'\\d+\',str(movieEval))[-1]
        data.
append(movieEvalNum)

        
# 得到电影的短评
        movieQuote = movieLi.find(\'span\', attrs={\'class\'\'inq\'})
        
if(movieQuote):
            data.
append(movieQuote.getText())
        
else:
            data.
append("无")

        
print(outputMode.format(data[0], data[1], data[2], data[3], chr(12288)))


# 将输出重定向到txt文件
output = sys.stdout
outputfile = 
open("moviedata.txt"\'w\', encoding = \'utf-8\')
sys.stdout = outputfile
outputMode = 
"{0:{4}^20}\\t{1:^10}\\t{2:^10}\\t{3:{4}<10}"
print(outputMode.format(\'电影名称\'\'评分\'\'评论人数\'\'短评\'chr(12288)))
basicUrl = 
\'https://movie.douban.com/top250\'
k = 
0
while k <= 225:
    html = getHTMLText(basicUrl, k)
    time.sleep(
2)
    k += 
25
    getData(html)

outputfile.
close()
sys.stdout = output

 参考出处:https://blog.csdn.net/linzch3/article/details/62444947

以上是关于Python爬虫-豆瓣电影 Top 250的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫练习1:豆瓣电影TOP250

python爬虫入门爬取豆瓣电影top250

python scrapy 爬虫豆瓣电影TOP250

Python爬虫之多线程下载豆瓣Top250电影图片

python爬虫--爬取豆瓣top250电影名

Python开发简单爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据