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

相关推荐
程序 代码狂人3 分钟前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
小码哥_常6 分钟前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋17 分钟前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
2501_944521591 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
鸿蒙开发2 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录2 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发
计算机魔术师2 小时前
950亿怎么拆:Meta给AI基建配的三档弹药
前端
碳基生物猛吃膳食纤维2 小时前
结合DEEPSEEK和CHATGPT弄了个小脚本,批量检查商品主图
前端
绝世唐门三哥2 小时前
CSS 换行三剑客:overflow-wrap、word-break 与 white-space 完全指南
前端·css
程序员初一2 小时前
我把跑了两年 WordPress 的机器重装了一遍,顺便把面板卸了
javascript