Python爬虫-豆瓣电影 Top 250,,爬取的网页地址为:h


爬取的网页地址为: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-*-
importrequests#requests模块
frombs4importBeautifulSoup#BeautifulSoup4模块
importre#正则表达式模块
importtime#时间模块
importsys#系统模块

"""获取html文档"""
defgetHTMLText(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
returnr.text
except:
print("Failed!")

"""解析数据"""
defgetData(html):
soup=BeautifulSoup(html,"html.parser")
movieList=soup.find(‘ol‘,attrs={‘class‘:‘grid_view‘})#找到第一个class属性值为grid_view的ol标签
moveInfo=[]
formovieLiinmovieList.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
whilek<=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

评论关闭