Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例)

这篇具有很好参考价值的文章主要介绍了Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整个分享分为下面几个部分:

目录

1.导入所需的库

2.设定三个变量存储从爬取的评论数据中提取的信息

3.爬取指定页面数(total_pages)的评论数据。

4.设定postURL

6.找到景点的poild并填写在代码中

问题1:有时候Poild会被隐藏,所以可能需要多试几次。(或者新开一个浏览器窗口复制打开)

7.发送POST请求到指定的postUrl,并加载响应的JSON数据。

8.爬取评论接口数据,提取评论信息。

9.将评论数据转换为DataFrame格式,再保存为Excel文件

问题2:有955条评论的,但是只能爬到700多条,现下只能解决到这种程度了,求教希望知道怎么做的小伙伴)

下面为全部代码,如果你着急运行请直接点到这里。


1.导入所需的库

requests处理HTTP请求,json库处理JSON数据。导入数据分析工具Pandas,用于创建和操作DataFrame。导入tqdm用于创建进度条,提供可视化的进度显示。

import requests
import json
import pandas as pd
from tqdm import tqdm
2.设定三个变量存储从爬取的评论数据中提取的信息

userNames:存储评论中的用户名信息。

commentDetails:存储评论的具体内容。

commentTimes:存储评论的时间信息。

在代码执行的过程中,针对每一条评论,程序会从评论数据中提取相应的用户名、评论内容和评论时间,然后将这些信息分别添加到对应的列表中。循环结束后,列表中将包含所有评论页面中提取的用户名、评论内容和评论时间的信息。

userNames = []
commentDetails = []
commentTimes = []
3.爬取指定页面数(total_pages)的评论数据。

total_pages=14:设置了要爬取的总页数为14页,即爬取14次评论页面。

total_pages = 14

forpagenintqdm(range(0,total_pages),desc='爬取进度',unit='页')使用for循环迭代爬取评论页面,range(0,total_pages)生成了一个包含0到total_pages-1的整数序列,每次迭代爬取一页评论。

payload:请求的参数,包含爬取评论所需的各种信息,如评论所属频道类型、是否折叠、评论标签等。参数会在每次循环中被传递给请求,以获取对应页面的评论数据。

postUrl:设置评论数据的请求链接。

这样,通过循环遍历,每次发送一个带有不同页码的请求,从而获取每页的评论数据。整个过程中,进度条显示当前爬取的进度。

for pagen in tqdm(range(0, total_pages), desc='爬取进度', unit='页'):
    payload = {
        "arg": {
            "channelType": 2,
            "collapseTpte": 0,
            "commentTagId": 0,
            "pageSize": 50,#需要自己更改的地方:自己设定每页爬多少条
            "poiId": 81011,#需要自己更改的地方:为景点的信息,其他都可以直接复制
            "sourseType": 1,
            "sortType": 3,
            "pageIndex": pagen,
            "starType": 0
        },
        "head": {
            "cid": "09031062417234242897",
            "ctok": "",
            "cver": "1.0",
            "lang": "01",
            "sid": "888",
            "syscode": "09",
            "auth": "",
            "xsid": "",
            "extension": []
        }
    }
4.设定postURL

postUrl是设定的评论数据请求链接,它是个URL。包含一些查询参数,用于定制请求的行为。

https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList指定请求路径和资源路径,告诉服务器我们想要获取评论的折叠列表,以JSON格式返回。

这里提供其他用途的url(某处截图到的,忘记来源了,侵删)

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

综合起来,postUrl指定了请求的服务端资源路径,并携带了一些参数,以获取携程网站上指定景点评论的折叠列表。

这里在(开Fn 按F12打开开发者工具)

网络——>找到第二个这个包 ——>负载内有一些我们需要的信息

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

6.找到景点的poild并填写在代码中

关键来了!!!!!!!!!!!我们要找到景点的poild,这是我们找到那个景点的关键!!(poild需要填写的地方在上面那段代码里,已标注)

那么我们如何找到Poild呢?

如果直接打开携程网站,找到景点黄龙溪,其页面会是这样的:

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

点开点评,发现点评的页面的网址是不改变的(翻页了也无法看到变化,那么就麻烦了,这个页面我无法实现爬取,所以另辟蹊径了哈)

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

回归到我们说找Poild的问题,请打开下面这个网址:

携程旅行-酒店预订,机票预订查询,旅游度假,商旅管理-携程无线官网

打开是这样的页面:

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

请在搜索框输入黄龙溪,点开这个链接(黄龙溪 热门景点)

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

页面是这样的,这里就出现了该景点的poild为81011。

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

点开点评链接。

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

点开之后呈现的页面如图,然后你往下翻之后发现是动态页面,向下滑动评论才会一条条蹦出来。

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

第二个可以获得poild的地方(有时要多试几次)(上面的看了,这里可以不看)

看到上面那行网址了吧,poild值在那段里面,你复制一下它:

【携程攻略】携程旅游攻略,自助游,自驾游,出游,自由行攻略指南 (ctrip.com)

它有点乱糟糟的,我们打开站长来解下码:

解码网址:UrlEncode编码/UrlDecode解码 - 站长工具

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

成功的情况:

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

恭喜你完成主线任务!

问题1:有时候Poild会被隐藏,所以可能需要多试几次。(或者新开一个浏览器窗口复制打开)

这种是被隐藏的情况,url中没有出现poild:
Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

主要讲解部分结束了,后面基本不需要做改动了。

7.发送POST请求到指定的postUrl,并加载响应的JSON数据。

requests.post(postUrl,data=json.dumps(payload)):使用requests库发送POST请求到指定的postUrl。

data=json.dumps(payload)将Python字典payload转换成JSON格式的字符串,并将其作为请求的数据发送给服务器。

.text:获取服务器响应的内容,这里是评论数据的JSON字符串。

html_1=json.loads(html):将获取的JSON字符串转换为Python对象。json.loads()函数用于解析JSON字符串,将其转换为相应的Python数据结构,存储在变量html_1中。

综合起来,向指定的携程网站评论数据接口发送请求,并将得到的JSON数据加载为Python对象。

    html = requests.post(postUrl, data=json.dumps(payload)).text
    html_1 = json.loads(html)
8.爬取评论接口数据,提取评论信息。

检查携程网站评论数据接口返回的JSON数据中是否包含名为'items'的键。如果存在,说明有评论数据可供提取。接着,通过遍历commentItems列表,将每一条评论的相关信息提取并添加到对应的列表中(userNames、commentDetails和commentTimes)。

代码解析:

if'items'inhtml_1["result"]检查JSON数据中是否包含"items"键。如果存在,说明有评论数据可供提取,进入下一步处理。

commentItems=html_1["result"]["items"]:将评论数据提取出来,存储在commentItems变量中。这是一个列表,每个元素代表一条评论。

foriinrange(0,len(commentItems))遍历评论数据列表,处理每一条评论。

ifcommentItems[i]isnotNoneand'userInfo'incommentItems[i]and'userNick'incommentItems[i]['userInfo']::在访问元素之前检查当前评论项是否不为None,并且该评论项包含'userInfo'键和'userNick'键。这是为了确保评论数据中包含用户信息,并且该用户信息中包含用户名。将提取的用户名、评论内容和评论时间分别添加到userNames、commentDetails和commentTimes列表中。

    # 检查响应中是否存在'items'
    if 'items' in html_1["result"]:
        commentItems = html_1["result"]["items"]

        for i in range(0, len(commentItems)):
            # 在访问元素之前检查当前项是否不为None
            if commentItems[i] is not None and 'userInfo' in commentItems[i] and 'userNick' in commentItems[i]['userInfo']:
                userName = commentItems[i]['userInfo']['userNick']
                commentDetail = commentItems[i]['content']
                commentTime = commentItems[i]['publishTypeTag']

                userNames.append(userName)
                commentDetails.append(commentDetail)
                commentTimes.append(commentTime)
9.将评论数据转换为DataFrame格式,再保存为Excel文件
# 创建 DataFrame
df = pd.DataFrame({
    '用户评论内容': commentDetails,
    '用户名': userNames,
    '用户评论时间': commentTimes
})

# 保存到 Excel 文件
df.to_excel('只爬黄龙溪评论1223url.xlsx', index=False, encoding='utf-8')

获得的信息有700条,保存为excel文件。

问题2:有955条评论的,但是只能爬到700多条,现下只能解决到这种程度了,求教希望知道怎么做的小伙伴)

Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例),python,网络爬虫

下面为全部代码,如果你着急运行请直接点到这里。
import requests
import json
import pandas as pd
from tqdm import tqdm

userNames = []
commentDetails = []
commentTimes = []

total_pages = 14

for pagen in tqdm(range(0, total_pages), desc='爬取进度', unit='页'):
    payload = {
        "arg": {
            "channelType": 2,
            "collapseTpte": 0,
            "commentTagId": 0,
            "pageSize": 50,
            "poiId": 81011,#需要自己更改的地方 为景点的信息 其他都可以直接复制
            "sourseType": 1,
            "sortType": 3,
            "pageIndex": pagen,
            "starType": 0
        },
        "head": {
            "cid": "09031062417234242897",
            "ctok": "",
            "cver": "1.0",
            "lang": "01",
            "sid": "888",
            "syscode": "09",
            "auth": "",
            "xsid": "",
            "extension": []
        }
    }
    postUrl = "https://m.ctrip.com/restapi/soa2/13444/json/getCommentCollapseList"

    html = requests.post(postUrl, data=json.dumps(payload)).text
    html_1 = json.loads(html)

    # 检查响应中是否存在'items'
    if 'items' in html_1["result"]:
        commentItems = html_1["result"]["items"]

        for i in range(0, len(commentItems)):
            # 在访问元素之前检查当前项是否不为None
            if commentItems[i] is not None and 'userInfo' in commentItems[i] and 'userNick' in commentItems[i]['userInfo']:
                userName = commentItems[i]['userInfo']['userNick']
                commentDetail = commentItems[i]['content']
                commentTime = commentItems[i]['publishTypeTag']

                userNames.append(userName)
                commentDetails.append(commentDetail)
                commentTimes.append(commentTime)

# 创建 DataFrame
df = pd.DataFrame({
    '用户评论内容': commentDetails,
    '用户名': userNames,
    '用户评论时间': commentTimes
})

# 保存到 Excel 文件
df.to_excel('只爬黄龙溪评论1223url.xlsx', index=False, encoding='utf-8')

小白写文,有问题请多多指教。文章来源地址https://www.toymoban.com/news/detail-766622.html

到了这里,关于Python爬携程指定景点评论的用户、评论内容及时间(景点黄龙溪为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信旅游景区景点评论小程序系统设计与实现

    目的 :本课题主要目标是设计并能够实现一个基于微信景区景点旅游攻略小程序系统,前台用户使用小程序,小程序使用微信开发者工具开发;后台管理使用基PP+MySql的B/S架构,开发工具使用phpstorm;通过后台添加景区景点信息,管理景区景点订单,管理评论等,用户通过小

    2024年02月11日
    浏览(53)
  • 【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

    目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影数据 3.1、爬取全部长、短评论 3.2、获取用户

    2024年02月09日
    浏览(48)
  • Python Flask+Echarts+sklearn+MySQL(评论情感分析、用户推荐、BI报表)项目分享

    随着互联网的快速发展和智能手机的普及,人们越来越倾向于在网上查找餐厅、购物中心、酒店和旅游景点等商户的点评和评分信息,以便做出更好的消费决策。Yelp作为美国著名的商户点评网站,提供了一个平台,让用户可以对商户进行评价和点评,并与其他用户分享自己的

    2024年02月12日
    浏览(50)
  • Python-pdfplumber读取PDF所有内容并自行提取指定内容

    🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:一晌小贪欢的博客主页 👍 该系列文章专栏:Python办公自动化专栏 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 ❤️ 欢迎各位佬关注! ❤️ 最近接到一个需求

    2024年02月15日
    浏览(63)
  • 7.6:Python如何在文件中查找指定的内容?

    在当今数据量日益增长的时代,对于数据的处理和分析成为了各行各业都需要掌握的技能。Python作为一门流行的编程语言,拥有着强大的数据处理和分析能力,成为了数据科学领域的重要工具之一。在Python中,处理文件中的数据是常见的需求之一,而在处理文件数据中查找指

    2024年02月08日
    浏览(34)
  • 筛选特定内容:Python中筛选DataFrame指定数据列包含特定内容的所有数据行

    筛选特定内容:Python中筛选DataFrame指定数据列包含特定内容的所有数据行 在数据处理和分析中,经常需要对数据进行筛选以便找到我们需要的信息。而在Python中,使用Pandas库中的DataFrame对象可以方便地对数据进行处理和分析。 下面我们来看如何使用contains()函数,筛选DataFr

    2024年02月14日
    浏览(40)
  • python读取word/pdf文档,指定文字内容和图片

    任务要求: 将每页需要的内容读取出来放到不同的文件夹,找出含有指定内容的页面创建文件夹,然后把相关的内容和图片放进去。 pdf 读起来比较方便, 按页码读取文件:

    2024年02月12日
    浏览(66)
  • 在 Python 中如何删除指定字符之前或之后的所有内容

    要删除字符串中某个字符后的所有内容: 使用 str.split() 方法在分隔符上拆分字符串。 访问索引 0 处的列表元素以获取分隔符之前的所有内容。 或者,使用加法 + 运算符添加分隔符。 我们使用 str.split() 方法删除字符(示例中的!)之后的所有内容。 str.split() 方法使用定界符

    2024年02月08日
    浏览(48)
  • DEDECMS删除指定ip的评论方法

    在网站中很多人都会启用织梦的留言本功能,所以在评论的时候就会有很多会员和游客的留言,有的时候也会有很多朋友都是来发广告的,所以在审核评论的时候就会很费劲,往往一个ip会有很多条垃圾广告,所以在删除的就需要指定ip来删除,这样既快捷又方便。 删除指定

    2024年02月03日
    浏览(44)
  • 微信小程序 内容评论-回复评论-回复回复的实现(纯前端)

    输入框失去焦点时触发 如果你是点击输入框右边按钮才发送内容的话需要在输入框bindinput属性绑定以下方法获取用户输入的值

    2024年02月04日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包