在使用NLP技术进行网页商品数据抽取时,很多工程师会遇到如下三类瓶颈:
以我们采集的目标站点闲鱼为例,我们希望采集并分析关键词搜索下的前20条商品信息(价格、简介),对其进行分类统计。但如果直接使用传统requests库+BeautifulSoup方法采集,在未优化的情况下,往往会导致:
我们以关键词 “iPhone 13” 为例进行初步压测,在未启用任何优化手段前的性能如下:
指标类别 | 数值 |
---|---|
请求成功率 | 65% |
平均请求耗时 | 4.72秒 |
HTML解析耗时 | 2.15秒 |
NLP分类错误率 | 23.5% |
为了全面提升数据抓取效率和抽取准确性,我们采用以下三类优化手段:
#参考亿牛云爬虫代理加强版
proxies = {
"http": "http://用户名:密码@代理域名:端口",
"https": "http://用户名:密码@代理域名:端口"
}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Cookie": "session=模拟cookie内容"
}
from jieba.analyse import extract_tags
tags = extract_tags(item['desc'], topK=3)
import requests
from bs4 import BeautifulSoup
import jieba.analyse
import pandas as pd
import time
# 设置关键词搜索
keyword = "iPhone 13"
search_url = f"https://www.goofish.com/s/?q={keyword}"
# 设置代理IP(参考亿牛云爬虫代理加强版 )
proxies = {
"http": "http://16YUN:16IP@proxy.16yun.cn:3100",
"https": "http://16YUN:16IP@proxy.16yun.cn:3100"
}
# 设置 headers,包括User-Agent 和 Cookie
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Cookie": "sessionid=your_session_cookie_here"
}
# 初始化商品数据列表
items = []
# 发起请求并解析前20个商品信息
try:
response = requests.get(search_url, headers=headers, proxies=proxies, timeout=10)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取商品列表
product_cards = soup.select('.item-card')[:20]
for card in product_cards:
title_tag = card.select_one('.title')
price_tag = card.select_one('.price')
desc_tag = card.select_one('.description')
item = {
'title': title_tag.text.strip() if title_tag else '',
'price': float(price_tag.text.strip().replace('¥', '').replace(',', '')) if price_tag else 0,
'desc': desc_tag.text.strip() if desc_tag else ''
}
# 使用Jieba进行关键词提取,辅助分类
item['keywords'] = jieba.analyse.extract_tags(item['desc'], topK=3)
items.append(item)
except Exception as e:
print("请求失败:", e)
# 生成DataFrame进行统计分析
df = pd.DataFrame(items)
# 价格统计
avg_price = df['price'].mean()
max_price = df['price'].max()
min_price = df['price'].min()
# 关键词统计
from collections import Counter
all_keywords = sum(df['keywords'].tolist(), [])
keyword_counts = Counter(all_keywords).most_common(10)
# 输出分析结果
print("平均价格:¥{:.2f}".format(avg_price))
print("最高价格:¥{:.2f}".format(max_price))
print("最低价格:¥{:.2f}".format(min_price))
print("关键词Top 10:")
for kw, count in keyword_counts:
print(f"{kw}: {count}")
指标类别 | 优化前 | 优化后 | 提升幅度 |
---|---|---|---|
请求成功率 | 65% | 98% | +33% |
平均请求耗时 | 4.72秒 | 1.29秒 | -72.7% |
HTML解析耗时 | 2.15秒 | 0.86秒 | -60.0% |
NLP分类错误率 | 23.5% | 6.2% | -73.6% |
通过三层性能优化(代理防封、请求伪装、文本分析精调),我们成功将商品信息的可用率和分类准确率大幅提高,最终实现如下目标:
所有技术测试基于真实网络环境完成,使用的代理IP方案参考了爬虫代理的接入方式,保障了可持续采集能力。如需长期部署,建议引入缓存策略与增量更新机制,以进一步提升性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。