python - 如何在 Python 和 beautifulsoup 中从 CDATA 中提取数据?
问题描述
我想从 cd 数据中提取 post_id
<script type='text/javascript' data-cfasync='false'>
//<![CDATA[
_SHR_SETTINGS = {"endpoints":{"local_recs_url":"https:\/\/klaudynahebda.pl\/wp-admin\/admin-ajax.php?action=shareaholic_permalink_related"},"url_components":{"year":"2018","monthnum":"06","day":"19","post_id":"21132","postname":"letnie-warsztaty-ziolowo-kosmetyczne-7-9lipiec","author":"admin"}};
//]]>
</script>
我能够获取整个 CData 但不知道下一步该怎么做?
解决方案
也许这不是一个超级解决方案,但我明白了
from bs4 import BeautifulSoup
html = """
<script type='text/javascript' data-cfasync='false'>
//<![CDATA[
_SHR_SETTINGS = {"endpoints":{"local_recs_url":"https:\/\/klaudynahebda.pl\/wp-admin\/admin-ajax.php?action=shareaholic_permalink_related"},"url_components":{"year":"2018","monthnum":"06","day":"19","post_id":"21132","postname":"letnie-warsztaty-ziolowo-kosmetyczne-7-9lipiec","author":"admin"}};
//]]>
</script>
"""
soup = BeautifulSoup(html, 'lxml')
dct = {}
for scr in soup.find_all('script'):
for x in scr.text.split(','):
if 'post_id' in x:
k, v = x.replace('"', '').split(':')
dct[k] = v
print(dct['post_id'])
输出
21132
推荐阅读
- sql - SQL 基于字段值重复行,同时增加另一个字段
- linux - 在另一台 Linux 服务器上执行 shell 脚本
- javascript - 当页面更新时,会加载旧版本的包(npm)
- reactjs - react-app-rewired 是否可以用于有条件地配置对等依赖项
- spring-kafka - KafkaTemplate 是事务性发送同步还是异步?
- wordpress - 如何将新页面替换为现有 URL?
- sql - 多次加入同一个表,导致双记录
- python - Python plotnine - 添加一个矩形区域
- r - 消除 ”。” 从 R 中列名的末尾
- pandas - Pandas matplotlib 在定义颜色和样式时绘制无效的 RGBA 参数