整个分享分为下面几个部分:
目录
问题1:有时候Poild会被隐藏,所以可能需要多试几次。(或者新开一个浏览器窗口复制打开)
7.发送POST请求到指定的postUrl,并加载响应的JSON数据。
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(某处截图到的,忘记来源了,侵删)
综合起来,postUrl指定了请求的服务端资源路径,并携带了一些参数,以获取携程网站上指定景点评论的折叠列表。
这里在(开Fn 按F12打开开发者工具)
网络——>找到第二个这个包 ——>负载内有一些我们需要的信息