爬取大众点评店铺信息和评论内容

  1. 目标数据

(1) 店铺信息
• 店铺 ID (shopId)
• 店铺名称
• 地址
• 电话
• 评分
• 人均消费
• 特色菜品
• 营业时间

(2) 评论内容
• 用户昵称
• 评分
• 评论内容
• 评论时间
• 点赞数
• 图片/视频

  1. 爬取方案

(1) 获取店铺列表

入口:
• 直接访问 搜索页 获取店铺列表,如:

https://www.dianping.com/search/keyword/2/0_火锅

•	也可以使用 百度/Google 搜索 site:dianping.com 火锅,获取店铺 URL。

方法:
• 使用 Selenium 爬取动态加载的店铺信息:

from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

options = Options()
options.add_argument("--headless")  # 无头模式
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=options)
driver.get("https://www.dianping.com/search/keyword/2/0_火锅")
time.sleep(3)

shop_elements = driver.find_elements(By.CSS_SELECTOR, ".tit a")
for shop in shop_elements:
    print(shop.text, shop.get_attribute("href"))

driver.quit()```
•	这样可以获取店铺名称和链接,链接格式通常是:

https://www.dianping.com/shop/12345678

其中 12345678 是 shopId,后续用于抓取详细信息和评论。

(2) 获取店铺详情

使用 requests 直接抓取店铺页面:

from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Referer": "https://www.dianping.com/"
}

shop_id = "12345678"
url = f"https://www.dianping.com/shop/{shop_id}"

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")```

# 提取店铺名称
shop_name = soup.find("h1").text.strip()

# 提取评分
score = soup.select_one(".brief-info .mid-score").text if soup.select_one(".mid-score") else "无评分"

# 提取地址
address = soup.select_one(".address-info").text if soup.select_one(".address-info") else "无地址"

print(f"店铺名称: {shop_name}, 评分: {score}, 地址: {address}")```

优化点:
• 部分数据是 JavaScript 加载的,需要用 Selenium 或解析 Ajax 请求
• 可以通过正则提取 JSON 数据

(3) 爬取评论数据

评论数据是通过 Ajax 请求 加载的,接口类似:

https://www.dianping.com/ajax/json/shopDynamic/reviewAndStar?shopId=12345678

代码示例:


shop_id = "12345678"
url = f"https://www.dianping.com/ajax/json/shopDynamic/reviewAndStar?shopId={shop_id}"

response = requests.get(url, headers=headers)
data = json.loads(response.text)

for review in data["review"]["list"]:
    user = review["user"]["nickName"]
    rating = review["reviewStar"]
    content = review["reviewData"]
    print(f"用户: {user}, 评分: {rating}, 评论: {content}")```

优化点:
• 需要带上 Cookie 才能获取数据
• 评论数据可能加密,需要逆向分析

  1. 反爬策略

(1) 处理 Cookie 和 Headers
• 手动登录获取 Cookie
• Selenium 登录后存储 Cookie
• 每次请求前更新 User-Agent

(2) 代理池
• 采用 scrapy-rotating-proxies 或 requests + proxy:

    "http": "http://your_proxy:port",
    "https": "https://your_proxy:port"
}
response = requests.get(url, headers=headers, proxies=proxies)```

(3) 处理验证码
• 手动识别(适合小规模爬取)
• 使用 chaojiying 或 打码平台 进行自动识别
• 模拟鼠标滑动(Selenium + ActionChains)

  1. 数据存储

爬取的数据可以存入数据库或 CSV:


df = pd.DataFrame(comments)  # `comments` 是爬取的数据
df.to_csv("dianping_comments.csv", index=False, encoding="utf-8")```

或者存入 MySQL:


conn = pymysql.connect(host="localhost", user="root", password="123456", database="dianping", charset="utf8mb4")
cursor = conn.cursor()

sql = "INSERT INTO reviews (user, rating, content) VALUES (%s, %s, %s)"
cursor.executemany(sql, comments)
conn.commit()
cursor.close()
conn.close()```

内容仅供学习参考

### 回答1: Python是一种广泛使用的编程语言,可以用来编写数据抓取程序。以下是一个使用Python实现爬取大众点评店铺所有评论的简单步骤: 第一步:导入所需的Python库 在编写代码之前,您需要导入以下几个Python库:requests,lxmlre。我们将使用requests库获取大众点评网站上的HTML内容,lxml库用于解析HTML内容,re库用于正则表达式匹配。 示例代码: import requests from lxml import html import re 第二步:通过requests库获取HTML内容 使用requests库发起一个GET请求来获取其HTML内容。为此,您需要指定目标大众点评链接的URL,并使用requests库向该URL发送请求。响应将是包含HTML标记的文本字符串。在此示例中,我们将指定大众点评的商铺页面为目标。 代码: url = 'https://www.dianping.com/shop/123456/review_all' headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers) html_content = response.content 第三步:使用lxml库解析HTML内容 使用lxml库解析HTML内容。我们可以以页面源代码为输入并使用Xpath解析器提取评论列表中的数据。 代码: tree = html.fromstring(html_content) comment_items = tree.xpath('//div[@class="main-review"]') 第四步:提取评论内容 在这一步中,我们可以从评论列表中提取有用的信息,例如评论者昵称、评论文本等。我们将使用正则表达式来提取。 代码: for item in comment_items: user = item.xpath('./div[@class="dper-info"]/a[@class="name"]/text()')[0].strip() comment_content = item.xpath('./div[@class="review-words"]/text()')[0].strip() print(user, comment_content) 以上四个步骤是简要的Python代码实现爬取大众点评店铺所有评论的过程。需要了解的是,实际情况中,爬虫需要做到数据去重防止访问频率过高被封IP等安全性措施。 ### 回答2: 要使用Python爬取大众点评店铺所有评论,首先需要安装必要的库模块,比如requests、BeautifulSoupre。然后,需要打开需要爬取大众点评店铺网页,并通过分析网页结构找到评论的地址参数(一般为ajax请求),构建请求头请求参数,并发送请求获得评论数据。用BeautifulSoup对数据进行解析提取,根据需要进行清洗处理。最后,将数据保存到本地文本或数据库中。 具体的代码如下: ```python import requests from bs4 import BeautifulSoup import re # 构建请求头请求参数 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' } params = { 'shopId': 'xxxxxx', # 需要替换为要爬取店铺ID 'pageSize': '20', # 每页显示20条评论 'pageNum': '1', # 初始页码为1 'sortType': '1', # 1 表示按时间最新排序 'starRange': '0,5' # 全部评分 } # 发送请求,获取网页数据 url = 'http://www.dianping.com/ajax/json/shop/wizard/BasicHideInfoAjaxFP' response = requests.get(url, params=params, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') # 提取总页数,用于循环翻页爬取 total_page = int(soup.find('div', class_='reviews-pages').find_all('a')[-2].get_text()) # 循环翻页爬取评论数据 comments = [] for page in range(1, total_page+1): params['pageNum'] = str(page) url = 'http://www.dianping.com/shop/{0}/review_all/p{1}'.format(params['shopId'], page) response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') for comment in soup.find_all('div', class_='review-words'): comments.append(re.sub('\n|\s+', ' ', comment.get_text())) # 输出评论数据 for comment in comments: print(comment) ``` 备注:该代码仅供学习参考,爬取他人网页需遵守相关法律法规,勿用于商业用途。 ### 回答3: 想要实现爬取大众点评店铺所有评论的功能,可以使用Python编程语言来完成爬虫程序。 首先,需要安装并引入必要的Python库,如requests、re、time、json等。 接着,需要确定要爬取店铺的链接,然后使用requests库发送GET请求获取店铺首页的HTML页面。 在获取到HTML页面后,可以使用正则表达式来提取出所有评论的链接,并用requests库发送GET请求获取所有评论数据。 爬取评论数据时,需要注意反爬虫机制,可以设置请求头信息,模拟浏览器行为,以避免被封IP。同时,建议设置延时等待时间,以免过于频繁地请求数据。 最后,可以将爬取到的评论数据预处理,存储为CSV、JSON文件等格式,并使用数据分析工具进行后续分析处理。 总之,要实现爬取大众点评店铺所有评论的功能,需要有一定的Python编程基础网络爬虫经验,同时也需要注意数据安全合法性问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值