python代码爬取大众点评评论!直接copy就可以运行!

        很多研究需要爬取社交平台上评论区的数据,而大众点评的评论区的数据具有评价对象清晰、评论内容更有价值等优点。下面,小编就手把手教你如何爬取大众点评评论区的数据。(完整代码附在最后了,需要的请自取)

1.了解大众点评的link的结构

        Step 1:登录大众点评,任意搜索一个你感兴趣的评论区,比如“宽窄巷子”。

        Step 2:点击进入宽窄巷子的评论区。

        Step 3:点击F12查看抓包工具。如果没有在右边的抓包工具页面没有看到东西的话,点击F5刷新就可以了。然后在右边的搜索框中任意搜索一条评论中的关键词,输入完回车就行。

        Step 4:点击右边搜索出来的内容,然后点击标头,可以看到其页面链接是:

https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all

        Step 5:继续查看第二页评论和第三页评论的代码。下拉之后,点击评论的第2页、第3页,然后重复Step3-Step4就可以得到链接为:       

        第2页评论的链接:https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all/p2

        第3页评论的链接:https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all/p3

        再来看一下第1页评论的链接:

https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all

        观察上面的几页评论,不难发现,这几个评论的链接只有最后几个不一样,其实对于第一页的评论,你使用这个link:https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all/p1

        你会发现也可以到达评论的页面。所以,你要是想爬取大众点评的关于“宽窄巷子”的评论,你只需要通过修改链接p+number就可以了。对于这件事,只需要创建一个循环for p in range(0, max_num),然后拼接前面的一部分link就可以直接实现了。类似于以下的代码(实际还无法获取页面,因为需要你的cookie才行。不要着急,后面会介绍如何获取cookie的)

import requests
part_url = https://www.dianping.com/shop/k6uPaJKKCBJEBLfA/review_all/p
for i in range(0, 50):
    url = requests.get(f"{part_url}{i}")
    print(url)

        Step 6:进一步观察link的相同点。我们继续查看“太古里”的评论链接。

        第1页评论的链接:https://www.dianping.com/shop/l93VqJ8r2j4HARZ9/review_all

        第2页评论的链接:https://www.dianping.com/shop/l93VqJ8r2j4HARZ9/review_all/p2

        第3页评论的链接:https://www.dianping.com/shop/l93VqJ8r2j4HARZ9/review_all/p3

        与上述的“宽窄巷子”的链接对比,你会发现不同之处只有中间的:

        宽窄巷子:k6uPaJKKCBJEBLfA        

        太古里:l93VqJ8r2j4HARZ9

        我们把这个称为ID,每个对象的ID是固定的,并且ID和评价对象是一一对应的。

        所以我们可以总结出页面的link为:

https://www/dianping.com/shop/{ID}/review_all/p{page_num}

        Step 7:思考代码编写思路。

        现在我们知道了评论页面的链接的规律,我们就可以思考如何循环爬取页面了。由于link中只有两个变化的量:ID和page_num。对于这两个可变的量,我们直接把这个两个变量作为程序的输入就可以了!

2.了解大众点评的页面结构

        再次回到上一个Step 3的页面中,点击“响应”。

         在大众点评中,评论分类两类,一类是内容较多被折叠的评论,一类内容较少不被折叠的评论。

        对于第一类被折叠评论:<div class="review-truncated-words"></div>中的是被折叠的,就是带省略号的,而在<div class="review-words Hide"></div>中的是不带省略号。显然我们需要的是后者。所以,我们需要使用下面的正则表达式提取评论的内容:

re_1_comment = re.compile(r'<div class="review-words Hide">(?P<comment>.*?)<div class="less-words">', re.S)

        对于第二类不被折叠的评论:这类评论的内容在<div class="review-words"></div>中,因此我们需要换一个正则表达式才能提取评论的内容。

re_2_comment = re.compile(r'<div class="review-words">(?P<comment>.*?)</div>', re.S)

        所以,通过上述正则表达式,就可以提取html页面中需要的评论的内容了。

3.完整代码

        以下是完整代码,只需要6个输入参数就行:

        (1)user_agent:具体获取方法可以查看文章简单!直接copy代码就可运行!爬虫获取知乎评论!!!_python爬取知乎评论-CSDN博客

        (2)cookie:具体获取方法可以查看文章

简单!直接copy代码就可运行!爬虫获取知乎评论!!!_python爬取知乎评论-CSDN博客

        (3)评价对象:“宽窄巷子”,“太古里”等

        (4)code:上述的页面ID

        (5)min_num:评论区的最小页码,0,1,2,3等

        (6)max_num:评论区的最大页码,10,11,12等

import requests
import csv
from bs4 import BeautifulSoup
import re
from tqdm import tqdm
import time
from fake_useragent import UserAgent

# 随机生成 useragent
def get_random_useragent():
    ua = UserAgent()
    return ua.random

# 用于更新 headers
def update_headers(user_agent, cookie):
    headers = {
        "User-Agent": get_random_useragent(),
        "Cookie": cookie
    }
    return headers

# 获取评论
def get_comment(contents, re_, comment_list):
    comments = re_.finditer(contents)
    for comment_ in comments:
        raw_data = comment_.group("comment").strip()
        processed_data = re.sub(r"&#x0A;|&#x20;|<img.*?/>", "", raw_data)
        comment_list.append(processed_data)

    return comment_list

# 转换时间
def get_time(contents, re_, time_list):
    times = re_.finditer(contents)
    for time_ in times:
        raw_data = time_.group("time").strip()
        processed_data = re.sub(".*?更新于|' '", "", raw_data, flags=re.S)
        time_list.append(processed_data)

    return time_list

def load_comments(contents, re_1, re_2, re_3, re_4, csv_writer, key_word):
    # Step 1:获取评论内容的部分
    comment_list = []
    time_list = []
    # Step 2:获取 hide 的评论
    comment_list = get_comment(contents, re_1, comment_list)
    time_list = get_time(contents, re_2, time_list)
    # Step 3:获取未 hide 的评论
    comment_list = get_comment(contents, re_3, comment_list)
    time_list = get_time(contents, re_4, time_list)
    print(time_list)
    for comment_, time_ in zip(comment_list, time_list):
        csv_writer.writerow([key_word, time_, comment_])

    time.sleep(5)

    return True

if __name__ == '__main__':
    # 定义参数
    user_agent = input("请输入user_agent:")
    cookie = input("请输入cookie:")
    key_word = input("请输入评价的对象:")
    code = input("请输入code:")
    min_num = int(input("请输入最小页码:"))
    max_num = int(input("请输入最大页码:"))
    headers = update_headers(user_agent, cookie)

    # 打开文件
    # TODO:修改成自己的文件地址
    f = open("../final_comments_data/comments_dzdp.csv", mode="a", encoding="utf-8")
    csv_writer = csv.writer(f)
    # 加载正则表达式,用于提取需要的信息
    re_1_comment = re.compile(r'<div class="review-words Hide">(?P<comment>.*?)<div class="less-words">', re.S)
    re_1_time = re.compile(r'<div class="review-words Hide">.*?<span class="time">(?P<time>.*?)</span>', re.S)
    re_2_comment = re.compile(r'<div class="review-words">(?P<comment>.*?)</div>', re.S)
    re_2_time = re.compile(r'<div class="review-words">.*?<span class="time">(?P<time>.*?)</span>', re.S)

    for i in tqdm(range(min_num, max_num)):
        resp = requests.get(f"https://www.dianping.com/shop/{code}/review_all/p{i}", headers=headers)
        resp.encoding = "utf-8"
        contents = resp.text
        # store what I fetched
        load_comments(contents,
                      re_1=re_1_comment,
                      re_2=re_1_time,
                      re_3=re_2_comment,
                      re_4=re_2_time,
                      csv_writer=csv_writer,
                      key_word=key_word)

    f.close()
### 回答1: CSDN大众点评评论数据是指CSDN社区中用户对各类软件、开源项目、编程语言等技术类产品的评价和讨论。这些评论数据可以帮助用户了解产品的优缺点,收集用户反馈,有助于进行产品改进和优化。同时,这些评论数据也可以为产品的品牌推广提供帮助,用户对产品的正面评价可以为产品树立良好的口碑和信誉。 除了对技术类产品的评论,CSDN大众点评还提供了许多关于IT领域新闻和趋势的讨论和交流。这些讨论和交流内容使得CSDN大众点评成为了IT技术领域的社交平台,助力世界人民更好地掌握科技前沿资讯,提升技能,使得他们在日常工作中更加高效、便捷。 总之,CSDN大众点评评论数据不断涵盖越来越多的技术类产品,这为技术爱好者、初学者和开发者们提供了一个宝贵的社区资源。正是因为这些资源的存在,才让广大的网友能相互学习、互相交流、快速进步,不断推动着科技领域的繁荣与发展。 ### 回答2: CSDN大众点评评论数据是指从CSDN社区和大众点评网站获取的用户评论信息。这些评论数据包含了各种用户在使用相应的产品、服务或技术方面的个人看法和使用体验,能够有效地反映出网民对不同产品、服务和技术的评价和反馈。同时,这些数据还可以提供商家和制造商对他们的产品的全面观察,以及市场分析人员进行市场研究和分析的有用资源。 CSDN大众点评评论数据可应用于多种场合,如企业竞争情报、市场调查、品牌形象塑造等方面。通过对这些数据进行分析,可以发现消费者偏好和不喜欢的产品特点,进而优化产品市场策略和创新产品开发。同时,还可以分析用户需求和满意度,为企业提供产品优化的方向,并提升企业的服务质量和口碑。此外,这些数据还能帮助企业进行竞争情报和行业分析,洞悉市场变化趋势,更好地发现和把握市场机会。 总之,CSDN大众点评评论数据是一个非常有价值的资源,它可以为企业提供实用的市场分析、竞争情报和产品开发方向等方面的信息,有助于企业更好地把握市场机遇,提升产品质量和市场竞争力。
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值