# -*- coding: utf-8 -*-
"""
抽取某本书的前 50 条短评内容并计算评分的平均值
"""
import requests
from bs4 import BeautifulSoup
import re
sum = 0
url = 'https://book.douban.com/subject/26853356/comments/'
pattern_s = re.compile('<span class="user-stars allstar(.*?) rating"')
points = pattern = [] #此处有错
#pattern = []
#points = []
while len(points) < 50:
r = requests.get(url) # 豆瓣 《鱼王》短评
soup = BeautifulSoup(r.text, 'lxml') # 这里需要下载lxml包
pattern.extend(soup.find_all('p', 'comment-content'))
points.extend(re.findall(pattern_s, r.text)) # #返回列表
btn = soup.find_all('a', 'page-btn', text="后一页")
url += btn[0].attrs['href']
for star in points:
sum += int(star)
print("the average value is : {:.2f} ".format(sum/len(points)))
int(star) star 是一个tag类型? why? 不应是列表里面的数字嘛
pattern.extend(soup.find_all('p', 'comment-content'))
points.extend(re.findall(pattern_s, r.text)) # #返回列表
看起来像是pattern 和 points 指向了同一个内存数据。(有么有大神深耕过指导下详细)
pattern里面的值先变化了,points也跟着变化了