使用BeautifulSoup爬取Goodreads书评仅返回20条结果的问题
解决Goodreads书评爬取数量不足的问题
直接用requests.get()发起请求时,服务器可能识别出你是爬虫,返回的内容和浏览器实际加载的不一致,这就是你只能拿到20条书评的核心原因。解决思路很简单——给请求加上浏览器的请求头,模拟正常用户访问。
修改后的代码如下:
import requests from bs4 import BeautifulSoup url = "https://www.goodreads.com/book/show/26114463/reviews?reviewFilters={%22workId%22:%22kca://work/amzn1.gr.work.v1.lSjSf2r-G6D1advk_kunEg%22,%22after%22:%22NjAwMDEsMTU4Njg4NDczNzY1MQ%22}" # 添加请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } html_text = requests.get(url, headers=headers).text soup = BeautifulSoup(html_text, 'html.parser') # 提取书评元素(需根据页面实际结构调整选择器) reviews = soup.find_all("div", class_="reviewText") print(f"共获取到{len(reviews)}条书评") for idx, review in enumerate(reviews, 1): print(f"第{idx}条书评:{review.get_text(strip=True)}")
额外说明:
- 可以替换
User-Agent为你当前浏览器的真实UA,进一步降低被识别为爬虫的概率 - 提取书评时,要对照Goodreads页面的HTML结构调整标签和类名,确保选择器能精准定位到书评内容
- 若加请求头后仍只有20条,大概率是页面部分内容通过AJAX动态加载,但你提到首次加载显示30条,所以加请求头基本能解决问题
内容的提问来源于stack exchange,提问作者beans
相关产品推荐
相关产品推荐

