BeautifulSoup4通过lxml使用Xpath定位实例

有以下html。<a>中含有图片链接(可能有多个<a>,每一个都含有一张图片链接)。最后一个<div>中含有文字。

上代码:

复制代码
import requests
from bs4 import BeautifulSoup
from lxml import etree

url='https://www.aaabbbccc.com'
r=requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
dom = etree.HTML(str(soup))

my_id='tnews365/31258'

#获取图片链接,放到列表img_url_list中
img_url_list=[]

img_nodes_list=dom.xpath(f"//div[contains(@data-post,'{my_id}')]//a[contains(@class,'tgme_widget_message_photo_wrap')]")

for img_node in img_nodes_list:
    style=img_node.get('style')#图片的链接在style属性中
    #使用正则取出url链接
    img_url_match = r"url\('(.*?)'\)"#注意,匹配(或者)需要使用转义
    slotList = re.findall(img_url_match, style)#此处结果是一个列表
    img_url_list.extend(slotList)

#获取文本内容
text_nodes_list=dom.xpath(f"//div[contains(@data-post,'{my_id}')]//div[contains(@class,'tgme_widget_message_text')]")
try:
    artile_content=text_nodes_list[0].xpath('string(.)')#获取符合条件的div内的文字
except:
    artile_content='本篇无文字内容'

主要知识点:

1、获取指定父节点下的子节点

参考文档:解决xpath定位,获取某个子节点中的某个孩子节点或者文本_xpath当前节点及子节点的文本-CSDN博客

2、获取指定节点下的文本

参考文档:https://www.cnblogs.com/AllenMi/p/14320887.html

相关推荐
用户47949283569158 分钟前
改了CSS刷新没反应-你可能不懂HTTP缓存
前端·javascript·面试
FLGB20 分钟前
maven漏洞检测报告
java·maven
还好还好不是吗25 分钟前
老项目改造 vue-cli 2.6 升级 rsbuild 提升开发效率300% upupup!!!
前端·性能优化
sumAll27 分钟前
别再手动对齐矩形了!这个开源神器让 AI 帮你画架构图 (Next-AI-Draw-IO 体验)
前端·人工智能·next.js
OpenTiny社区29 分钟前
2025OpenTiny星光ShowTime!年度贡献者征集启动!
前端·vue.js·低代码
农夫山泉2号30 分钟前
【c++】——c++编译的so中函数有额外的字符
java·服务器·c++
wangan09440 分钟前
不带圆圈的二叉树
java·前端·javascript
狗哥哥40 分钟前
从零到一:打造企业级 Vue 3 高性能表格组件的设计哲学与实践
前端·vue.js·架构
疯狂平头哥43 分钟前
微信小程序真机预览-数字不等宽如何解决
前端
Drift_Dream1 小时前
前端趣味交互:如何精准判断鼠标从哪个方向进入元素?
前端