Qwen-Ranker Pro与Python爬虫实战:智能语义精排在数据采集中的应用

发布时间:2026/6/21 15:01:24

Qwen-Ranker Pro与Python爬虫实战:智能语义精排在数据采集中的应用 Qwen-Ranker Pro与Python爬虫实战智能语义精排在数据采集中的应用1. 引言想象一下这样的场景你花了好几个小时写了一个Python爬虫从几十个网站上抓取了上千条产品信息。数据是拿到了但当你真正开始分析时却发现大部分内容都是重复的、低质量的甚至是完全不相关的。筛选这些数据又花了你大半天时间效率低得让人抓狂。这就是传统爬虫面临的痛点——我们能够获取海量数据却很难快速识别出其中真正有价值的信息。而Qwen-Ranker Pro的出现正好解决了这个难题。它就像一个智能的数据质检员能够理解文本的深层语义帮你从杂乱无章的数据中精准筛选出高质量内容。本文将带你了解如何将Qwen-Ranker Pro的智能语义精排能力与Python爬虫技术结合打造一个既能大量采集数据又能智能筛选高价值信息的完整解决方案。2. 爬虫数据采集与清洗2.1 基础爬虫实现我们先从一个简单的电商产品信息爬虫开始。这里以requests和BeautifulSoup为例抓取产品名称、描述和价格信息import requests from bs4 import BeautifulSoup import pandas as pd def crawl_products(url): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: response requests.get(url, headersheaders, timeout10) response.raise_for_status() soup BeautifulSoup(response.text, html.parser) products [] # 根据实际网站结构调整选择器 product_elements soup.select(.product-item) for item in product_elements: try: name item.select_one(.product-name).text.strip() description item.select_one(.product-desc).text.strip() price item.select_one(.price).text.strip() products.append({ name: name, description: description, price: price, source_url: url }) except Exception as e: print(f解析产品时出错: {e}) continue return products except Exception as e: print(f爬取失败: {e}) return [] # 批量爬取多个页面 all_products [] urls [ https://example.com/products/page1, https://example.com/products/page2, # 添加更多页面URL ] for url in urls: products crawl_products(url) all_products.extend(products) time.sleep(1) # 礼貌性延迟 print(f共爬取 {len(all_products)} 条产品信息)2.2 数据清洗与预处理爬取到的原始数据往往包含各种噪音需要进行清洗import re import jieba from typing import List, Dict def clean_text(text: str) - str: 清洗文本数据 if not text: return # 移除HTML标签 text re.sub(r[^], , text) # 移除特殊字符和多余空格 text re.sub(r[^\w\u4e00-\u9fff\s], , text) text re.sub(r\s, , text).strip() return text def preprocess_products(products: List[Dict]) - List[Dict]: 预处理产品数据 processed_products [] for product in products: try: # 清洗各个字段 clean_product { name: clean_text(product[name]), description: clean_text(product[description]), price: clean_text(product[price]), source_url: product[source_url], text_length: len(clean_text(product[description])) } # 过滤掉描述过短的产品 if clean_product[text_length] 10: processed_products.append(clean_product) except Exception as e: print(f处理产品时出错: {e}) continue return processed_products # 清洗数据 cleaned_products preprocess_products(all_products) print(f清洗后剩余 {len(cleaned_products)} 条有效产品信息)3. Qwen-Ranker Pro集成与语义精排3.1 环境准备与模型部署首先确保已经部署好Qwen-Ranker Pro服务import requests import json from typing import List class QwenRankerClient: def __init__(self, api_url: str, api_key: str None): self.api_url api_url self.headers { Content-Type: application/json, Authorization: fBearer {api_key} if api_key else } def rank_documents(self, query: str, documents: List[str], top_k: int 10): 使用Qwen-Ranker Pro对文档进行语义精排 payload { query: query, documents: documents, top_k: top_k, return_scores: True } try: response requests.post( self.api_url, headersself.headers, jsonpayload, timeout30 ) response.raise_for_status() result response.json() return result.get(results, []) except Exception as e: print(f排序请求失败: {e}) return [] # 初始化客户端 ranker_client QwenRankerClient( api_urlhttp://your-ranker-service/v1/rerank, api_keyyour-api-key )3.2 智能语义精排实战现在让我们用Qwen-Ranker Pro对爬取的产品数据进行智能排序def intelligent_ranking(products: List[Dict], search_query: str, top_n: int 20): 对产品进行智能语义排序 # 准备待排序的文本 documents [] for product in products: # 将产品信息组合成完整的文本描述 product_text f产品名称: {product[name]}. 描述: {product[description]}. 价格: {product[price]} documents.append(product_text) # 使用Qwen-Ranker Pro进行语义精排 ranked_results ranker_client.rank_documents( querysearch_query, documentsdocuments, top_kmin(top_n * 2, len(documents)) # 多取一些结果用于后续处理 ) # 提取排序后的产品信息 ranked_products [] for result in ranked_results: index result[index] score result[score] original_product products[index] ranked_products.append({ **original_product, relevance_score: score, rank: len(ranked_products) 1 }) return ranked_products[:top_n] # 示例搜索性价比高的智能手机 search_query 性价比高的智能手机 top_products intelligent_ranking(cleaned_products, search_query, top_n10) print(智能排序后的TOP 10产品:) for i, product in enumerate(top_products, 1): print(f{i}. {product[name]} - 相关性得分: {product[relevance_score]:.3f}) print(f 描述: {product[description][:100]}...) print(f 价格: {product[price]}) print()4. 完整实战案例电商产品智能采集系统4.1 系统架构设计让我们构建一个完整的电商产品智能采集系统import sqlite3 from datetime import datetime import time class SmartProductCrawler: def __init__(self, db_path: str products.db): self.db_path db_path self.ranker_client QwenRankerClient( api_urlhttp://your-ranker-service/v1/rerank ) self.init_database() def init_database(self): 初始化数据库 conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( CREATE TABLE IF NOT EXISTS products ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, description TEXT, price TEXT, source_url TEXT, relevance_score REAL, category TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) cursor.execute( CREATE TABLE IF NOT EXISTS search_queries ( id INTEGER PRIMARY KEY AUTOINCREMENT, query_text TEXT NOT NULL, result_count INTEGER, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) conn.commit() conn.close() def save_products(self, products: List[Dict], query: str None): 保存产品数据到数据库 conn sqlite3.connect(self.db_path) cursor conn.cursor() if query: cursor.execute( INSERT INTO search_queries (query_text, result_count) VALUES (?, ?), (query, len(products)) ) for product in products: cursor.execute( INSERT OR REPLACE INTO products (name, description, price, source_url, relevance_score, category, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?) , ( product[name], product[description], product[price], product[source_url], product.get(relevance_score, 0), product.get(category, ), datetime.now() )) conn.commit() conn.close() def run_crawling_session(self, urls: List[str], search_queries: List[str]): 运行完整的爬取和排序流程 all_products [] # 爬取数据 print(开始爬取产品数据...) for url in urls: products crawl_products(url) all_products.extend(products) print(f从 {url} 爬取到 {len(products)} 条产品) time.sleep(1) # 数据清洗 cleaned_products preprocess_products(all_products) print(f数据清洗完成有效产品数: {len(cleaned_products)}) # 对每个搜索查询进行智能排序 results {} for query in search_queries: print(f正在处理查询: {query}) ranked_products intelligent_ranking(cleaned_products, query, top_n15) results[query] ranked_products # 保存结果 self.save_products(ranked_products, query) print(f为查询 {query} 找到 {len(ranked_products)} 个相关产品) return results # 使用示例 if __name__ __main__: crawler SmartProductCrawler() # 配置要爬取的URL和搜索查询 target_urls [ https://example-electronics.com/products, https://tech-store.com/items, # 更多电商网站... ] search_queries [ 性价比高的智能手机, 轻薄便携笔记本电脑, 家用智能音箱, 无线蓝牙耳机 ] # 运行爬取和排序 results crawler.run_crawling_session(target_urls, search_queries) print(智能采集完成) for query, products in results.items(): print(f\n查询: {query}) for i, product in enumerate(products[:3], 1): print(f {i}. {product[name]} (得分: {product[relevance_score]:.3f}))4.2 高级功能扩展为了提升系统的实用性我们可以添加一些高级功能def analyze_trending_products(conn, days: int 7): 分析近期热门产品趋势 cursor conn.cursor() # 获取近期高评分产品 cursor.execute( SELECT name, description, AVG(relevance_score) as avg_score, COUNT(*) as appearance_count FROM products WHERE created_at datetime(now, ?) GROUP BY name, description HAVING appearance_count 1 ORDER BY avg_score DESC LIMIT 10 , (f-{days} days,)) trending_products cursor.fetchall() return trending_products def export_to_csv(conn, output_path: str): 导出数据到CSV文件 import csv cursor conn.cursor() cursor.execute( SELECT name, description, price, relevance_score, category, source_url FROM products ORDER BY relevance_score DESC ) with open(output_path, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow([产品名称, 描述, 价格, 相关度得分, 类别, 来源URL]) for row in cursor.fetchall(): writer.writerow(row) print(f数据已导出到: {output_path}) # 使用高级功能 conn sqlite3.connect(products.db) trending analyze_trending_products(conn, days7) print(近期热门产品趋势:) for product in trending: print(f- {product[0]} (平均得分: {product[2]:.3f}, 出现次数: {product[3]})) export_to_csv(conn, ranked_products.csv) conn.close()5. 总结通过将Qwen-Ranker Pro的智能语义精排能力与Python爬虫技术结合我们构建了一个强大的数据采集和处理系统。这个系统不仅能够从多个来源抓取数据更重要的是能够理解内容的语义价值自动筛选出最相关、最高质量的信息。实际使用下来这种组合方案的效果相当不错。传统的爬虫只能解决有没有数据的问题而加上智能排序后我们解决了数据好不好的问题。特别是在处理大量文本数据时语义理解的优势更加明显——它能够捕捉到关键词匹配无法发现的深层关联。如果你也在做数据采集相关的工作建议尝试一下这种思路。先从简单的场景开始比如对某个特定主题的内容进行筛选熟悉之后再扩展到更复杂的应用。过程中可能会遇到一些调优的问题比如如何设计更好的查询语句、如何处理特殊领域的数据等但这些都可以通过实践逐步解决。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻