对于BS中返回的ResultSet的使用心得

本文介绍使用Python的BeautifulSoup库进行网页爬取时find_all()函数的应用技巧。该函数返回一个ResultSet集合,可以被视为list的一种形式,便于进一步筛选数据。通过实例展示了如何定位特定元素并提取所需信息。

初次使用python进行爬虫学习,之前一直被卡在BS中find_all()这个函数的使用上,今天无意中调通,发现原来find_all()返回的是一个ResultSet的集合,而这个集合可以视为一种list,只不过其中len()=1,因此对于不断缩小片段而言,是非常好用的。废话少说,上代码

soup = BeautifulSoup(html, "html.parser")
sInfo = soup.find_all('div', attrs={'class': 'stock-bets'})
name = sInfo[0].find('a', attrs={'class': 'bets-name'}).text.split()
这其中,soup是BS搜寻中返回的网页代码树,由于其体积相对比较庞大,因此可以对其中片段进行缩小,因此其中就可以反复使用findall()函数,只不过,必须将其指定到具体位置,即要使用【0】,代码中使用sInfo[0].find all()




在 Java 中判断 PostgreSQL 函数是否返回 `ResultSet`,可以通过 JDBC 提供的 `Statement.execute()` 方法来判断 SQL 语句是否返回结果集。 --- ### ✅ 核心方法:使用 `Statement.execute()` ```java Statement stmt = connection.createStatement(); String sql = "SELECT your_function_name(?)"; boolean hasResultSet = stmt.execute(sql); if (hasResultSet) { // 返回ResultSet ResultSet rs = stmt.getResultSet(); while (rs.next()) { // 处理结果 } } else { // 没有返回 ResultSet,可能是更新行数 int rowsAffected = stmt.getUpdateCount(); } ``` --- ### 🧠 原理说明 - `execute()` 返回 `true` 表示 SQL 返回了 `ResultSet`(例如函数返回了值或执行了 `SELECT`)。 - 返回 `false` 表示 SQL 执行的是更新操作(如 `INSERT`, `UPDATE`, `DELETE` 或返回 `VOID` 的函数)。 - 你可以通过 `getResultSet()` 获取结果集,或通过 `getUpdateCount()` 获取影响的行数。 --- ### ✅ 示例:判断不同类型的函数 #### ✅ 示例1:函数返回 `VOID` ```sql CREATE OR REPLACE FUNCTION delete_user(id INT) RETURNS VOID AS $$ BEGIN DELETE FROM users WHERE user_id = id; END; $$ LANGUAGE plpgsql; ``` Java 调用: ```java boolean hasResultSet = stmt.execute("SELECT delete_user(123)"); // hasResultSet == false ``` --- #### ✅ 示例2:函数返回 `INT` ```sql CREATE OR REPLACE FUNCTION get_user_count() RETURNS INT AS $$ DECLARE cnt INT; BEGIN SELECT COUNT(*) INTO cnt FROM users; RETURN cnt; END; $$ LANGUAGE plpgsql; ``` Java 调用: ```java boolean hasResultSet = stmt.execute("SELECT get_user_count()"); // hasResultSet == true ``` --- ### ✅ 示例3:函数返回 `SETOF RECORD` 或 `TABLE` ```sql CREATE OR REPLACE FUNCTION get_all_users() RETURNS TABLE(id INT, name TEXT) AS $$ BEGIN RETURN QUERY SELECT user_id, user_name FROM users; END; $$ LANGUAGE plpgsql; ``` Java 调用: ```java boolean hasResultSet = stmt.execute("SELECT get_all_users()"); // hasResultSet == true ``` --- ### ✅ 工具辅助:在 PostgreSQL 中查看函数返回类型 你可以通过以下 SQL 查询函数的返回类型: ```sql SELECT proname, prorettype::regtype FROM pg_proc WHERE proname = 'your_function_name'; ``` 常见返回类型包括: | 返回类型 | 是否返回 ResultSet | |----------|------------------| | `void` | ❌ 不返回 | | `int`, `text`, `uuid` 等标量类型 | ✅ 返回单值 | | `record`, `table`, `setof` 类型 | ✅ 返回多行 | --- ### ✅ 总结:Java 如何判断函数是否返回 ResultSet? | 方法 | 是否返回 ResultSet | |------|------------------| | `stmt.execute(sql)` 返回 `true` | ✅ 返回ResultSet | | `stmt.execute(sql)` 返回 `false` | ❌ 没有返回 ResultSet | | 使用 `executeQuery()` | ✅ 强制当作 ResultSet 调用(函数必须返回结果) | | 使用 `executeUpdate()` | ❌ 强制当作更新操作(函数不能返回结果) | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值