练习要求:
抽取某本书的前50条短评内容并计算评分的平均值。提示:有的评论中并不包含评分。
代码:
# -*- coding: utf-8 -*-
"""
Spyder Editor
This is a temporary script file.
"""
import requests
from bs4 import BeautifulSoup
import re
import time
total = 50 #用于记录剩余的短评数量
ans=0 #用于累加星级
i=1 #用于翻页
kk=0 #临时变量,用于total的二次使用
while total>0:
kk=total #将total在循环开始时的值保存
try:
r = requests.get("https://book.douban.com/subject/30211681/comments/hot?p="+str(i)) #利用requests库抓取网页内容
except Exception as err:
print(err)
break
soup = BeautifulSoup(r.text,"lxml") #利用BeautifulSoup库进行解析
comments = soup.find_all('span', 'short') #找到标签含有span和short的部分
pattern = re.compile('<span class="user-stars allstar(.*?) rating"')#用complie进行正则表达式预处理
p = re.findall(pattern, r.text) #在已经抓取的文本中匹配已经解析的正则表达式
for item in comments:
total -=1
if total<0:
break
else:
print(50-total, item.string)
for star in p:
kk -=1
if kk<0:
break
else:
ans+=int(star)
i+=1
print(ans/50/10)