Python爬虫实战案例——第六例

文章中所有内容仅供学习交流使用,不用于其他任何目的!严禁将文中内容用于任何商业与非法用途,由此产生的一切后果与作者无关。若有侵权,请联系删除。

目标:去哪儿网指定城市人气值最高的15个景点评论数据采集

地址:aHR0cHM6Ly9waWFvLnF1bmFyLmNvbS90aWNrZXQvbGlzdC5odG0/a2V5d29yZD0lRTUlOEMlOTclRTQlQkElQUMmcGFnZT0xJnNvcnQ9cHA=

进入主页之后可以看到每一个景点是根据推荐来进行排序的,所以我们如果要获取人气值最高的景点的话需要获取人气排序时的url,点击根据人气排序即可。

其在url中的体现主要是查询参数sort的值的改变。

通过抓包预览不难发现在当前页面中各景点的详情页url是位于静态html中的,所以我们考虑使用xpath来解析详情页的url。

这部分代码如下

python 复制代码
def index_request(url):
    """请求主页获取每一个景点的详情页面url"""
    response = requests.get(url, params=params, headers=headers)
    text_html = response.content.decode()
    tree = etree.HTML(text_html)
    div_list = tree.xpath('//*[@id="search-list"]/div')     # 各个景点所在的所有div标签,需要提取出各个景点的详情页面的url
    for div in div_list:
        detail_url = 'https://piao.qunar.com' + div.xpath('./div[1]/div[2]/h3/a/@href')[0]
        detail_request(detail_url)

注意:该站点对Cookie有最基础的检测,所以代码中需要携带上Cookie进行请求。

在获取到详情页的url之后,就需要对详情页进行分析,寻找一下用户评论是如何获取的。首先来观察静态页面,在其中我们是无法看到用户评论的,所以初步断定用户评论是异步加载的数据。

切到xhr中分析,包并不多,可以直接搜索关键字快速定位也可以一个个查看。

定位到之后分析一下这个包的请求接口在请求的时候可能传递的参数。

可以看到的是一共传递了5个参数,其中page表示的是页数,这个毫无疑问;pageSize表示每页多少条数据,这个参数是不用修改的。其他参数就需要我们去访问不同页面进行分析了,接下来我们翻到第二页看一下两次访问有什么不同。

可以看到两页不同的请求变化的参数为index和page,再多访问几页也是一样的结果,所以断定index随page变化而同步变化。最后剩下sightId这个参数,这个参数如果有经验的话其实可以断定其是某个景点在这个站点中的唯一ID。就算不知道的话我们也可以来直接搜索一下这个值,因为该值在多次访问的时候是没有发生变化的,所以直接全局搜索即可。

这样来看就非常明显了,这个值就是从静态页面中可以直接提取的,那么我们就需要先访问详情页面将sightId值解析出来作为评论接口的参数。最后请求评论接口以获取评论信息并保存即可。

完整代码请移步:https://gitee.com/shuailiuquan/spider-code/tree/master/

相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时2 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊2 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1232 天前
2026年第38周GitHub趋势周报
python·科技·github