You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两段Yelp评论爬取脚本差异排查:一段正常一段失效

Yelp评论爬取脚本故障排查

我编写了两段用于爬取Yelp平台餐厅评论的Python脚本,第一段可正常运行并获取评论内容,但第二段脚本无法正常工作,无法理解其失效原因,希望排查问题以实现Yelp评论的爬取。

第一段可正常运行的脚本

import time
import random
from bs4 import BeautifulSoup as bs
import urllib
import urllib.request as url

html = urllib.request.urlopen('https://www.yelp.com/biz/the-stillery-nashville?osq=Restaurants+Nashville+Tn').read().decode('utf-8')
soup = bs(html, 'html.parser')

relevant= soup.find_all('p', class_='comment__09f24__gu0rG css-qgunke')

for div in relevant:
        for html_class in div.find_all('span',class_="raw__09f24__T4Ezm"):
            text = html_class.find('span')
            review = html_class.getText()
            print(review)

第二段无法正常运行的脚本

import time
import random
from bs4 import BeautifulSoup 
import urllib
import urllib.request as url
import html

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

url='https://www.yelp.com/biz/the-hampton-social-nashville-nashville-2?osq=Restaurants+Nashville+Tn'
response=requests.get(url, headers=headers)
soup2 = BeautifulSoup(response.text, 'html.parser')

relevant2= soup2.find_all('p', class_='comment__09f24__gu0rG css-qgunke')
for div in relevant2:
        for html_class in div.find_all('span',class_="raw__09f24__T4Ezm"):
            #text = html_class.find('span')
            review2 = html_class.get_text()
            print(review2)

故障原因分析

  • 缺少requests模块导入:第二段脚本使用了requests.get()方法,但未导入requests库,运行时会直接抛出NameError: name 'requests' is not defined错误,这是最直接的问题。
  • 变量名冲突:脚本同时将url作为urllib.request的别名和目标URL的字符串变量,覆盖了模块引用,属于不良编码习惯,可能引发后续逻辑问题。
  • User-Agent版本过旧:使用的Chrome 58版本过于老旧,Yelp的反爬机制可能识别并拦截这类请求,返回的页面不包含评论内容,导致find_all无法匹配目标元素。
  • 反爬机制限制:不同商家页面的渲染逻辑存在差异,部分页面需要携带有效Cookie或会话请求才能获取完整内容,第二段脚本未处理这些,导致返回的HTML结构不含评论节点。

修复后的脚本示例

import time
import random
import requests
from bs4 import BeautifulSoup 

# 更新为较新的User-Agent
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'}

target_url = 'https://www.yelp.com/biz/the-hampton-social-nashville-nashville-2?osq=Restaurants+Nashville+Tn'
# 添加随机延迟,模拟人类行为
time.sleep(random.uniform(1,3))
response = requests.get(target_url, headers=headers)
# 检查请求是否成功
if response.status_code != 200:
    print(f"请求失败,状态码:{response.status_code}")
else:
    soup2 = BeautifulSoup(response.text, 'html.parser')
    relevant2 = soup2.find_all('p', class_='comment__09f24__gu0rG css-qgunke')
    if not relevant2:
        print("未找到评论节点,可能被反爬拦截")
    else:
        for div in relevant2:
            for html_class in div.find_all('span', class_="raw__09f24__T4Ezm"):
                review2 = html_class.get_text()
                print(review2)

内容的提问来源于stack exchange,提问作者sha_phys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:07:39