有以下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、获取指定节点下的文本