Xpath提取HTML源码复用到BS4

本文介绍如何结合使用Xpath与Beautiful Soup 4 (BS4) 进行网页内容解析。首先利用Xpath精准定位HTML元素,再通过BS4进行更细致的数据处理。示例代码展示了从定位到解析的具体步骤。

Xpath确实是一个很方便的工具

在Xpath与BS4复用的时候,需要先用XPATH定位出HTML的某一块内容,然后再用BS4解析,这里放出源码

from lxml import html,etree
import html as HTML
from bs4 import BeautifulSoup

text = """
    <body>
        <div id="aa">aa啊</div>
        <div id="ab">ab啊</div>
        <div id="ac">ac啊</div>
    </body>
    """
#先创建etree
selector= etree.HTML(text)
#Xpath先定位
content=selector.xpath('//div[@id="aa" or @id="ac"]')
print(content)
#xpath给的是列表,需要循环
for i in content:
    i = html.tostring(i)
    i = str(i, encoding = "utf-8")
    print(i)
    #转str后发现不是中文,自带库重命名为大写避开etree的小写html库
    i = HTML.unescape(i)
    print(i)
    #将转化完成的content扔进bs4,可以正常工作了
    soup = BeautifulSoup(i,'lxml')
    print(soup.find_all('div'))
# -*- coding: utf-8 -*- # @Author : relakkes@gmail.com # @Time : 2024/3/27 22:47 # @Desc : 分别使用两个库演示如何提取html文档结构数据 from bs4 import BeautifulSoup from parsel import Selector class NoteContent: title: str = "" author: str = "" publish_date: str = "" detail_link: str = "" def __str__(self): return f""" Title: {self.title} User: {self.author} Publish Date: {self.publish_date} Detail Link: {self.detail_link} """ def parse_html_use_bs(html_content: str): """ 使用BeautifulSoup提取帖子标题、作者、发布日期,基于css选择器提取 :param html_content: html源代码内容 :return: """ # 初始化一个帖子保存容器 note_content = NoteContent() # 初始化bs查询对象 soup = BeautifulSoup(html_content, "lxml") # 提取标题并去左右除换行空格字符 note_content.title = soup.select("div.r-ent div.title a")[0].text.strip() # 提取作者 note_content.author = soup.select("div.r-ent div.meta div.author")[0].text.strip() # 提取发布日期 note_content.publish_date = soup.select("div.r-ent div.meta div.date")[0].text.strip() # 提取帖子链接 note_content.detail_link = soup.select("div.r-ent div.title a")[0]["href"] print("BeautifulSoup" + "*" * 30) print(note_content) print("BeautifulSoup" + "*" * 30) def parse_html_use_parse(html_content: str): """ 使用parsel提取帖子标题、作者、发布日期,基于xpath选择器提取 :param html_content: html源代码内容 :return: """ # 初始化一个帖子保存容器 note_content = NoteContent() # 使用parsel创建选择器对象 selector = Selector(text=html_content) # 使用XPath提取标题并去除左右空格 note_content.title = selector.xpath("//div[@class='r-ent']/div[@class='title']/a/text()").extract_first().strip() # 使用XPath提取作者 note_content.author = selector.xpath("//div[@class='r-ent']/div[@class='meta']/div[@class='author']/text()").extract_first().strip() # 使用XPath提取发布日期 note_content.publish_date = selector.xpath("//div[@class='r-ent']/div[@class='meta']/div[@class='date']/text()").extract_first().strip() # 使用XPath提取帖子链接 note_content.detail_link = selector.xpath("//div[@class='r-ent']/div[@class='title']/a/@href").extract_first() print("parsel" + "*" * 30) print(note_content) print("parsel" + "*" * 30)这段代码优化
最新发布
07-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值