You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BeautifulSoup中如何通过CSS选择器精准提取目标文本

问题原因

你当前使用的CSS选择器匹配范围过宽,选中了酒店信息卡片中包含评分、距地标距离、优惠标签等多类信息的父级容器,因此会输出该容器下所有子节点的混合文本。同时原有代码未携带合法请求头,很容易被网站反爬机制拦截,返回无效的页面内容。

修改方法
  • 给requests请求添加标准浏览器的User-Agent请求头,绕过基础反爬校验,拿到完整的有效页面DOM
  • 替换原有依赖层级位置的nth-child选择器,改用页面中专门标记地点元素的data-testid="location"属性做精准定位,这类测试属性一般不会随页面样式调整变动,定位准确率远高于层级选择器
修改后完整代码
import pandas as pd
from bs4 import BeautifulSoup as bs
import requests

url = "https://www.hotels.com/Hotel-Search?adults=2&d1=2022-07-01&d2=2022-07-02&destination=Georgia&endDate=2022-07-02&latLong=42.211058611965235%2C43.30777377386527&regionId=11403&rooms=1&semdtl=&sort=RECOMMENDED&startDate=2022-07-01&theme=&useRewards=false&userIntent="

# 携带合法浏览器标识请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}
soup = bs(requests.get(url, headers=headers).content, "html.parser")

# 精准匹配地点元素
locations = soup.select('[data-testid="location"]')
for location in locations:
    # 去除文本前后多余空白字符后输出
    print(location.text.strip())

补充说明:如果后续网站前端迭代导致data-testid属性失效,可以打开浏览器开发者工具定位显示地点的DOM节点,替换为节点上的稳定属性选择器即可,尽量避免使用多层嵌套+nth-child的选择器写法,这类写法只要页面某一层级结构调整就会完全失效。

内容的提问来源于stack exchange,提问作者beridzeg45

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:57:21